Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/arch/x86/tools/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 1 kB image not shown  

Quelle  cpufeaturemasks.awk   Sprache: unbekannt

 
Spracherkennung für: .awk vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

#!/usr/bin/awk
#
# Convert cpufeatures.h to a list of compile-time masks
# Note: this blithely assumes that each word has at least one
# feature defined in it; if not, something else is wrong!
#

BEGIN {
 printf "#ifndef _ASM_X86_CPUFEATUREMASKS_H\n";
 printf "#define _ASM_X86_CPUFEATUREMASKS_H\n\n";

 file = 0
}

FNR == 1 {
 ++file;

 # arch/x86/include/asm/cpufeatures.h
 if (file == 1)
  FS = "[ \t()*+]+";

 # .config
 if (file == 2)
  FS = "=";
}

# Create a dictionary of sorts, containing all defined feature bits
file == 1 && $1 ~ /^#define$/ && $2 ~ /^X86_FEATURE_/ {
 nfeat = $3 * $4 + $5;
 feat = $2;
 sub(/^X86_FEATURE_/, "", feat);
 feats[nfeat] = feat;
}
file == 1 && $1 ~ /^#define$/ && $2 == "NCAPINTS" {
 ncapints = int($3);
}

# Create a dictionary featstat[REQUIRED|DISABLED, FEATURE_NAME] = on | off
file == 2 && $1 ~ /^CONFIG_X86_(REQUIRED|DISABLED)_FEATURE_/ {
 on = ($2 == "y");
 if (split($1, fs, "CONFIG_X86_|_FEATURE_") == 3)
  featstat[fs[2], fs[3]] = on;
}

END {
 sets[1] = "REQUIRED";
 sets[2] = "DISABLED";

 for (ns in sets) {
  s = sets[ns];

  printf "/*\n";
  printf " * %s features:\n", s;
  printf " *\n";
  fstr = "";
  for (i = 0; i < ncapints; i++) {
   mask = 0;
   for (j = 0; j < 32; j++) {
    feat = feats[i*32 + j];
    if (featstat[s, feat]) {
     nfstr = fstr " " feat;
     if (length(nfstr) > 72) {
      printf " *   %s\n", fstr;
      nfstr = " " feat;
     }
     fstr = nfstr;
     mask += (2 ^ j);
    }
   }
   masks[i] = mask;
  }
  printf " *   %s\n */\n", fstr;

  for (i = 0; i < ncapints; i++)
   printf "#define %s_MASK%d\t0x%08xU\n", s, i, masks[i];

  printf "\n#define %s_MASK_BIT_SET(x)\t\t\t\\\n", s;
  printf "\t((\t\t\t\t\t";
  for (i = 0; i < ncapints; i++) {
   if (masks[i])
    printf "\t\\\n\t\t((x) >> 5) == %2d ? %s_MASK%d :", i, s, i;
  }
  printf " 0\t\\\n";
  printf "\t) & (1U << ((x) & 31)))\n\n";
 }

 printf "#endif /* _ASM_X86_CPUFEATUREMASKS_H */\n";
}

[ Dauer der Verarbeitung: 0.33 Sekunden  ]