static inline bool inheritsFrom()

in utils/TableGen/X86DisassemblerTables.cpp [76:354]


static inline bool inheritsFrom(InstructionContext child,
                                InstructionContext parent,
                                bool VEX_LIG = false, bool AdSize64 = false) {
  if (child == parent)
    return true;

  switch (parent) {
  case IC:
    return(inheritsFrom(child, IC_64BIT, AdSize64) ||
           inheritsFrom(child, IC_OPSIZE) ||
           inheritsFrom(child, IC_ADSIZE) ||
           inheritsFrom(child, IC_XD) ||
           inheritsFrom(child, IC_XS));
  case IC_64BIT:
    return(inheritsFrom(child, IC_64BIT_REXW)   ||
           inheritsFrom(child, IC_64BIT_OPSIZE) ||
           (!AdSize64 && inheritsFrom(child, IC_64BIT_ADSIZE)) ||
           inheritsFrom(child, IC_64BIT_XD)     ||
           inheritsFrom(child, IC_64BIT_XS));
  case IC_OPSIZE:
    return inheritsFrom(child, IC_64BIT_OPSIZE) ||
           inheritsFrom(child, IC_OPSIZE_ADSIZE);
  case IC_ADSIZE:
    return inheritsFrom(child, IC_OPSIZE_ADSIZE);
  case IC_OPSIZE_ADSIZE:
    return false;
  case IC_64BIT_ADSIZE:
    return inheritsFrom(child, IC_64BIT_OPSIZE_ADSIZE);
  case IC_64BIT_OPSIZE_ADSIZE:
    return false;
  case IC_XD:
    return inheritsFrom(child, IC_64BIT_XD);
  case IC_XS:
    return inheritsFrom(child, IC_64BIT_XS);
  case IC_XD_OPSIZE:
    return inheritsFrom(child, IC_64BIT_XD_OPSIZE);
  case IC_XS_OPSIZE:
    return inheritsFrom(child, IC_64BIT_XS_OPSIZE);
  case IC_64BIT_REXW:
    return(inheritsFrom(child, IC_64BIT_REXW_XS) ||
           inheritsFrom(child, IC_64BIT_REXW_XD) ||
           inheritsFrom(child, IC_64BIT_REXW_OPSIZE) ||
           (!AdSize64 && inheritsFrom(child, IC_64BIT_REXW_ADSIZE)));
  case IC_64BIT_OPSIZE:
    return inheritsFrom(child, IC_64BIT_REXW_OPSIZE) ||
           (!AdSize64 && inheritsFrom(child, IC_64BIT_OPSIZE_ADSIZE)) ||
           (!AdSize64 && inheritsFrom(child, IC_64BIT_REXW_ADSIZE));
  case IC_64BIT_XD:
    return(inheritsFrom(child, IC_64BIT_REXW_XD));
  case IC_64BIT_XS:
    return(inheritsFrom(child, IC_64BIT_REXW_XS));
  case IC_64BIT_XD_OPSIZE:
  case IC_64BIT_XS_OPSIZE:
    return false;
  case IC_64BIT_REXW_XD:
  case IC_64BIT_REXW_XS:
  case IC_64BIT_REXW_OPSIZE:
  case IC_64BIT_REXW_ADSIZE:
    return false;
  case IC_VEX:
    return (VEX_LIG && inheritsFrom(child, IC_VEX_L_W)) ||
           inheritsFrom(child, IC_VEX_W) ||
           (VEX_LIG && inheritsFrom(child, IC_VEX_L));
  case IC_VEX_XS:
    return (VEX_LIG && inheritsFrom(child, IC_VEX_L_W_XS)) ||
           inheritsFrom(child, IC_VEX_W_XS) ||
           (VEX_LIG && inheritsFrom(child, IC_VEX_L_XS));
  case IC_VEX_XD:
    return (VEX_LIG && inheritsFrom(child, IC_VEX_L_W_XD)) ||
           inheritsFrom(child, IC_VEX_W_XD) ||
           (VEX_LIG && inheritsFrom(child, IC_VEX_L_XD));
  case IC_VEX_OPSIZE:
    return (VEX_LIG && inheritsFrom(child, IC_VEX_L_W_OPSIZE)) ||
           inheritsFrom(child, IC_VEX_W_OPSIZE) ||
           (VEX_LIG && inheritsFrom(child, IC_VEX_L_OPSIZE));
  case IC_VEX_W:
    return VEX_LIG && inheritsFrom(child, IC_VEX_L_W);
  case IC_VEX_W_XS:
    return VEX_LIG && inheritsFrom(child, IC_VEX_L_W_XS);
  case IC_VEX_W_XD:
    return VEX_LIG && inheritsFrom(child, IC_VEX_L_W_XD);
  case IC_VEX_W_OPSIZE:
    return VEX_LIG && inheritsFrom(child, IC_VEX_L_W_OPSIZE);
  case IC_VEX_L:
    return inheritsFrom(child, IC_VEX_L_W);
  case IC_VEX_L_XS:
    return inheritsFrom(child, IC_VEX_L_W_XS);
  case IC_VEX_L_XD:
    return inheritsFrom(child, IC_VEX_L_W_XD);
  case IC_VEX_L_OPSIZE:
    return inheritsFrom(child, IC_VEX_L_W_OPSIZE);
  case IC_VEX_L_W:
  case IC_VEX_L_W_XS:
  case IC_VEX_L_W_XD:
  case IC_VEX_L_W_OPSIZE:
    return false;
  case IC_EVEX:
    return inheritsFrom(child, IC_EVEX_W) ||
           inheritsFrom(child, IC_EVEX_L_W);
  case IC_EVEX_XS:
    return inheritsFrom(child, IC_EVEX_W_XS) ||
           inheritsFrom(child, IC_EVEX_L_W_XS);
  case IC_EVEX_XD:
    return inheritsFrom(child, IC_EVEX_W_XD) ||
           inheritsFrom(child, IC_EVEX_L_W_XD);
  case IC_EVEX_OPSIZE:
    return inheritsFrom(child, IC_EVEX_W_OPSIZE) ||
           inheritsFrom(child, IC_EVEX_L_W_OPSIZE);
  case IC_EVEX_B:
    return false;
  case IC_EVEX_W:
  case IC_EVEX_W_XS:
  case IC_EVEX_W_XD:
  case IC_EVEX_W_OPSIZE:
    return false;
  case IC_EVEX_L:
  case IC_EVEX_L_K_B:
  case IC_EVEX_L_KZ_B:
  case IC_EVEX_L_B:
  case IC_EVEX_L_XS:
  case IC_EVEX_L_XD:
  case IC_EVEX_L_OPSIZE:
    return false;
  case IC_EVEX_L_W:
  case IC_EVEX_L_W_XS:
  case IC_EVEX_L_W_XD:
  case IC_EVEX_L_W_OPSIZE:
    return false;
  case IC_EVEX_L2:
  case IC_EVEX_L2_XS:
  case IC_EVEX_L2_XD:
  case IC_EVEX_L2_OPSIZE:
    return false;
  case IC_EVEX_L2_W:
  case IC_EVEX_L2_W_XS:
  case IC_EVEX_L2_W_XD:
  case IC_EVEX_L2_W_OPSIZE:
    return false;
  case IC_EVEX_K:
    return inheritsFrom(child, IC_EVEX_W_K) ||
           inheritsFrom(child, IC_EVEX_L_W_K);
  case IC_EVEX_XS_K:
  case IC_EVEX_XS_K_B:
  case IC_EVEX_XS_KZ_B:
    return inheritsFrom(child, IC_EVEX_W_XS_K) ||
           inheritsFrom(child, IC_EVEX_L_W_XS_K);
  case IC_EVEX_XD_K:
  case IC_EVEX_XD_K_B:
  case IC_EVEX_XD_KZ_B:
    return inheritsFrom(child, IC_EVEX_W_XD_K) ||
           inheritsFrom(child, IC_EVEX_L_W_XD_K);
  case IC_EVEX_XS_B:
  case IC_EVEX_XD_B:
  case IC_EVEX_K_B:
  case IC_EVEX_KZ:
    return false;
  case IC_EVEX_XS_KZ:
    return inheritsFrom(child, IC_EVEX_W_XS_KZ) ||
           inheritsFrom(child, IC_EVEX_L_W_XS_KZ);
  case IC_EVEX_XD_KZ:
    return inheritsFrom(child, IC_EVEX_W_XD_KZ) ||
           inheritsFrom(child, IC_EVEX_L_W_XD_KZ);
  case IC_EVEX_KZ_B:
  case IC_EVEX_OPSIZE_K:
  case IC_EVEX_OPSIZE_B:
  case IC_EVEX_OPSIZE_K_B:
  case IC_EVEX_OPSIZE_KZ:
  case IC_EVEX_OPSIZE_KZ_B:
    return false;
  case IC_EVEX_W_K:
  case IC_EVEX_W_B:
  case IC_EVEX_W_K_B:
  case IC_EVEX_W_KZ_B:
  case IC_EVEX_W_XS_K:
  case IC_EVEX_W_XD_K:
  case IC_EVEX_W_OPSIZE_K:
  case IC_EVEX_W_OPSIZE_B:
  case IC_EVEX_W_OPSIZE_K_B:
    return false;
  case IC_EVEX_L_K:
  case IC_EVEX_L_XS_K:
  case IC_EVEX_L_XD_K:
  case IC_EVEX_L_XD_B:
  case IC_EVEX_L_XD_K_B:
  case IC_EVEX_L_OPSIZE_K:
  case IC_EVEX_L_OPSIZE_B:
  case IC_EVEX_L_OPSIZE_K_B:
    return false;
  case IC_EVEX_W_KZ:
  case IC_EVEX_W_XS_KZ:
  case IC_EVEX_W_XD_KZ:
  case IC_EVEX_W_XS_B:
  case IC_EVEX_W_XD_B:
  case IC_EVEX_W_XS_K_B:
  case IC_EVEX_W_XD_K_B:
  case IC_EVEX_W_XS_KZ_B:
  case IC_EVEX_W_XD_KZ_B:
  case IC_EVEX_W_OPSIZE_KZ:
  case IC_EVEX_W_OPSIZE_KZ_B:
    return false;
  case IC_EVEX_L_KZ:
  case IC_EVEX_L_XS_KZ:
  case IC_EVEX_L_XS_B:
  case IC_EVEX_L_XS_K_B:
  case IC_EVEX_L_XS_KZ_B:
  case IC_EVEX_L_XD_KZ:
  case IC_EVEX_L_XD_KZ_B:
  case IC_EVEX_L_OPSIZE_KZ:
  case IC_EVEX_L_OPSIZE_KZ_B:
    return false;
  case IC_EVEX_L_W_K:
  case IC_EVEX_L_W_B:
  case IC_EVEX_L_W_K_B:    
  case IC_EVEX_L_W_XS_K:
  case IC_EVEX_L_W_XS_B:
  case IC_EVEX_L_W_XS_K_B:
  case IC_EVEX_L_W_XS_KZ:
  case IC_EVEX_L_W_XS_KZ_B:
  case IC_EVEX_L_W_OPSIZE_K:
  case IC_EVEX_L_W_OPSIZE_B:
  case IC_EVEX_L_W_OPSIZE_K_B:
  case IC_EVEX_L_W_KZ:
  case IC_EVEX_L_W_KZ_B:
  case IC_EVEX_L_W_XD_K:
  case IC_EVEX_L_W_XD_B:
  case IC_EVEX_L_W_XD_K_B:
  case IC_EVEX_L_W_XD_KZ:
  case IC_EVEX_L_W_XD_KZ_B:
  case IC_EVEX_L_W_OPSIZE_KZ:
  case IC_EVEX_L_W_OPSIZE_KZ_B:
    return false;
  case IC_EVEX_L2_K:
  case IC_EVEX_L2_B:
  case IC_EVEX_L2_K_B:
  case IC_EVEX_L2_KZ_B:
  case IC_EVEX_L2_XS_K:
  case IC_EVEX_L2_XS_K_B:
  case IC_EVEX_L2_XS_B:
  case IC_EVEX_L2_XD_B:
  case IC_EVEX_L2_XD_K:
  case IC_EVEX_L2_XD_K_B:
  case IC_EVEX_L2_OPSIZE_K:
  case IC_EVEX_L2_OPSIZE_B:
  case IC_EVEX_L2_OPSIZE_K_B:
  case IC_EVEX_L2_KZ:
  case IC_EVEX_L2_XS_KZ:
  case IC_EVEX_L2_XS_KZ_B:
  case IC_EVEX_L2_XD_KZ:
  case IC_EVEX_L2_XD_KZ_B:
  case IC_EVEX_L2_OPSIZE_KZ:
  case IC_EVEX_L2_OPSIZE_KZ_B:
    return false;
  case IC_EVEX_L2_W_K:
  case IC_EVEX_L2_W_B:
  case IC_EVEX_L2_W_K_B:
  case IC_EVEX_L2_W_KZ_B:
  case IC_EVEX_L2_W_XS_K:
  case IC_EVEX_L2_W_XS_B:
  case IC_EVEX_L2_W_XS_K_B:
  case IC_EVEX_L2_W_XD_K:
  case IC_EVEX_L2_W_XD_B:
  case IC_EVEX_L2_W_OPSIZE_K:
  case IC_EVEX_L2_W_OPSIZE_B:
  case IC_EVEX_L2_W_OPSIZE_K_B:
  case IC_EVEX_L2_W_KZ:
  case IC_EVEX_L2_W_XS_KZ:
  case IC_EVEX_L2_W_XS_KZ_B:
  case IC_EVEX_L2_W_XD_KZ:
  case IC_EVEX_L2_W_XD_K_B:
  case IC_EVEX_L2_W_XD_KZ_B:
  case IC_EVEX_L2_W_OPSIZE_KZ:
  case IC_EVEX_L2_W_OPSIZE_KZ_B:
    return false;
  default:
    errs() << "Unknown instruction class: " <<
      stringForContext((InstructionContext)parent) << "\n";
    llvm_unreachable("Unknown instruction class");
  }
}