mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-02 07:15:27 +08:00
qt 6.6.0 clean
This commit is contained in:
@ -4666,7 +4666,7 @@ def create_top_level_cmake_conf():
|
||||
conf_file_name = ".cmake.conf"
|
||||
try:
|
||||
with open(conf_file_name, "x") as file:
|
||||
file.write('set(QT_REPO_MODULE_VERSION "6.5.3")\n')
|
||||
file.write('set(QT_REPO_MODULE_VERSION "6.6.0")\n')
|
||||
except FileExistsError:
|
||||
pass
|
||||
|
||||
|
@ -288,7 +288,8 @@ class LocaleScanner (object):
|
||||
assert len(digits) == 10
|
||||
zero = digits[0]
|
||||
# Qt's number-formatting code assumes digits are consecutive
|
||||
# (except Suzhou, CLDR's hanidec - see QTBUG-85409):
|
||||
# (except Suzhou - see QTBUG-85409 - which shares its zero
|
||||
# with CLDR's very-non-contiguous hanidec):
|
||||
assert all(ord(c) == i + (0x3020 if ord(zero) == 0x3007 else ord(zero))
|
||||
for i, c in enumerate(digits[1:], 1))
|
||||
yield 'zero', zero
|
||||
|
@ -379,18 +379,8 @@ class LocaleDataWriter (LocaleSourceEditor):
|
||||
|
||||
def q(val: Optional[str], size: int) -> str:
|
||||
"""Quote the value and adjust the result for tabular view."""
|
||||
chars = []
|
||||
if val is not None:
|
||||
for c in val:
|
||||
chars.append(f"'{c}'")
|
||||
s = ', '.join(chars)
|
||||
s = f'{{{s}}}'
|
||||
else:
|
||||
s = ''
|
||||
if size == 0:
|
||||
return f'{{{s}}}'
|
||||
else:
|
||||
return f'{{{s}}},'.ljust(size * 5 + 4)
|
||||
s = '' if val is None else ', '.join(f"'{c}'" for c in val)
|
||||
return f'{{{s}}}' if size == 0 else f'{{{s}}},'.ljust(size * 5 + 2)
|
||||
|
||||
for key, value in languages.items():
|
||||
code = value[1]
|
||||
|
@ -68,9 +68,9 @@ export class BatchedTestRunner {
|
||||
|
||||
get errorDetails() { return this.#errorDetails; }
|
||||
|
||||
async run(targetIsBatch, testName, testOutputFormat) {
|
||||
async run(targetIsBatch, testName, functions, testOutputFormat) {
|
||||
try {
|
||||
await this.#doRun(targetIsBatch, testName, testOutputFormat);
|
||||
await this.#doRun(targetIsBatch, testName, functions, testOutputFormat);
|
||||
} catch (e) {
|
||||
this.#setTestRunnerError(e.message);
|
||||
return;
|
||||
@ -93,7 +93,7 @@ export class BatchedTestRunner {
|
||||
this.#setTestRunnerStatus(status.code, status.numberOfFailed);
|
||||
}
|
||||
|
||||
async #doRun(targetIsBatch, testName, testOutputFormat) {
|
||||
async #doRun(targetIsBatch, testName, functions, testOutputFormat) {
|
||||
const module = await this.#loader.loadEmscriptenModule(
|
||||
targetIsBatch ? BatchedTestRunner.#TestBatchModuleName : testName,
|
||||
() => { }
|
||||
@ -111,6 +111,7 @@ export class BatchedTestRunner {
|
||||
const LogToStdoutSpecialFilename = '-';
|
||||
result = await module.exec({
|
||||
args: [...(targetIsBatch ? [testClassName] : []),
|
||||
...(functions ?? []),
|
||||
'-o', `${LogToStdoutSpecialFilename},${testOutputFormat}`],
|
||||
onStdout: (output) => {
|
||||
this.#addTestOutput(testClassName, output);
|
||||
|
@ -5,8 +5,13 @@ import { RunnerStatus, TestStatus } from './batchedtestrunner.js';
|
||||
|
||||
// Sends messages to the running emrun instance via POST requests.
|
||||
export class EmrunCommunication {
|
||||
static #BATCHING_DELAY = 300;
|
||||
|
||||
#indexOfMessage = 0;
|
||||
#postOutputPromises = [];
|
||||
#postOutputPromise;
|
||||
// Accumulate output in a batch that gets sent with a delay so that the emrun http server
|
||||
// does not get pounded with requests.
|
||||
#nextOutputBatch = null;
|
||||
|
||||
#post(body) {
|
||||
return fetch('stdio.html', {
|
||||
@ -15,10 +20,11 @@ export class EmrunCommunication {
|
||||
});
|
||||
}
|
||||
|
||||
// Returns a promise whose resolution signals that all outstanding traffic to the emrun instance
|
||||
// has been completed.
|
||||
waitUntilAllSent() {
|
||||
return Promise.all(this.#postOutputPromises);
|
||||
// Waits for the output sending to finish, if any output transfer is still in progress.
|
||||
async waitUntilAllSent()
|
||||
{
|
||||
if (this.#postOutputPromise)
|
||||
await this.#postOutputPromise;
|
||||
}
|
||||
|
||||
// Posts the exit status to the running emrun instance. Emrun will drop connection unless it is
|
||||
@ -29,13 +35,25 @@ export class EmrunCommunication {
|
||||
|
||||
// Posts an indexed output chunk to the running emrun instance. Each consecutive call to this
|
||||
// method increments the output index by 1.
|
||||
postOutput(output) {
|
||||
const newPromise = this.#post(`^out^${this.#indexOfMessage++}^${output}`);
|
||||
this.#postOutputPromises.push(newPromise);
|
||||
newPromise.finally(() => {
|
||||
this.#postOutputPromises.splice(this.#postOutputPromises.indexOf(newPromise), 1);
|
||||
});
|
||||
return newPromise;
|
||||
postOutput(output)
|
||||
{
|
||||
if (this.#nextOutputBatch) {
|
||||
this.#nextOutputBatch += output;
|
||||
} else {
|
||||
this.#nextOutputBatch = output;
|
||||
this.#postOutputPromise = new Promise(resolve =>
|
||||
{
|
||||
window.setTimeout(() =>
|
||||
{
|
||||
const toSend = this.#nextOutputBatch;
|
||||
this.#nextOutputBatch = null;
|
||||
this.#post(`^out^${this.#indexOfMessage++}^${toSend}$`)
|
||||
.finally(resolve);
|
||||
}, EmrunCommunication.#BATCHING_DELAY);
|
||||
});
|
||||
}
|
||||
|
||||
return this.#postOutputPromise;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -176,12 +176,6 @@ export class CompiledModule {
|
||||
instanceParams.monitorRunDependencies = (name) => { };
|
||||
instanceParams.print = (text) => true && console.log(text);
|
||||
instanceParams.printErr = (text) => true && console.warn(text);
|
||||
instanceParams.preRun = [
|
||||
(instance) => {
|
||||
const env = {};
|
||||
instance.ENV = env;
|
||||
},
|
||||
];
|
||||
|
||||
instanceParams.mainScriptUrlOrBlob = new Blob([this.#js], {
|
||||
type: 'text/javascript',
|
||||
|
@ -11,6 +11,22 @@ import {
|
||||
import { parseQuery } from './util.js';
|
||||
import { VisualOutputProducer, UI, ScannerFactory } from './qtestoutputreporter.js'
|
||||
|
||||
const StandardArg = {
|
||||
qVisualOutput: 'qvisualoutput',
|
||||
qTestName: 'qtestname',
|
||||
qBatchedTest: 'qbatchedtest',
|
||||
qUseEmrun: 'quseemrun',
|
||||
qTestOutputFormat: 'qtestoutputformat',
|
||||
}
|
||||
|
||||
const allArgs = new Set(Object.getOwnPropertyNames(StandardArg).map(arg => StandardArg[arg]));
|
||||
Object.defineProperty(StandardArg, 'isKnown', {
|
||||
get()
|
||||
{
|
||||
return name => allArgs.has(name);
|
||||
},
|
||||
});
|
||||
|
||||
(() => {
|
||||
const setPageTitle = (useEmrun, testName, isBatch) => {
|
||||
document.title = 'Qt WASM test runner';
|
||||
@ -24,10 +40,11 @@ import { VisualOutputProducer, UI, ScannerFactory } from './qtestoutputreporter.
|
||||
}
|
||||
|
||||
const parsed = parseQuery(location.search);
|
||||
const outputInPage = parsed.get('qvisualoutput') !== undefined;
|
||||
const testName = parsed.get('qtestname');
|
||||
const isBatch = parsed.get('qbatchedtest') !== undefined;
|
||||
const useEmrun = parsed.get('quseemrun') !== undefined;
|
||||
const outputInPage = parsed.has(StandardArg.qVisualOutput);
|
||||
const testName = parsed.get(StandardArg.qTestName);
|
||||
const isBatch = parsed.has(StandardArg.qBatchedTest);
|
||||
const useEmrun = parsed.has(StandardArg.qUseEmrun);
|
||||
const functions = [...parsed.keys()].filter(arg => !StandardArg.isKnown(arg));
|
||||
|
||||
if (testName === undefined) {
|
||||
if (!isBatch)
|
||||
@ -37,7 +54,7 @@ import { VisualOutputProducer, UI, ScannerFactory } from './qtestoutputreporter.
|
||||
}
|
||||
|
||||
const testOutputFormat = (() => {
|
||||
const format = parsed.get('qtestoutputformat') ?? 'txt';
|
||||
const format = parsed.get(StandardArg.qTestOutputFormat) ?? 'txt';
|
||||
if (-1 === ['txt', 'xml', 'lightxml', 'junitxml', 'tap'].indexOf(format))
|
||||
throw new Error(`Bad file format: ${format}`);
|
||||
return format;
|
||||
@ -65,5 +82,5 @@ import { VisualOutputProducer, UI, ScannerFactory } from './qtestoutputreporter.
|
||||
}
|
||||
setPageTitle(useEmrun, testName, isBatch);
|
||||
|
||||
testRunner.run(isBatch, testName, testOutputFormat);
|
||||
testRunner.run(isBatch, testName, functions, testOutputFormat);
|
||||
})();
|
||||
|
120
util/wasm/preload/preload_qml_imports.py
Normal file
120
util/wasm/preload/preload_qml_imports.py
Normal file
@ -0,0 +1,120 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright (C) 2023 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import json
|
||||
import re
|
||||
|
||||
# Paths to shared libraries and qml imports on the Qt installation on the web server.
|
||||
# "$QTDIR" is replaced by qtloader.js at load time (defaults to "qt"), and makes
|
||||
# possible to relocate the application build relative to the Qt build on the web server.
|
||||
qt_lib_path = "$QTDIR/lib"
|
||||
qt_qml_path = "$QTDIR/qml"
|
||||
|
||||
# Path to QML imports on the in-memory file system provided by Emscripten. This script emits
|
||||
# preload commands which copies QML imports to this directory. In addition, preload_qt_plugins.py
|
||||
# creates (and preloads) a qt.conf file which makes Qt load QML plugins from this location.
|
||||
qt_deploy_qml_path = "/qt/qml"
|
||||
|
||||
|
||||
def eprint(*args, **kwargs):
|
||||
print(*args, file=sys.stderr, **kwargs)
|
||||
|
||||
|
||||
def preload_file(source, destination):
|
||||
preload_files.append({"source": source, "destination": destination})
|
||||
|
||||
|
||||
def find_dependencies(filepath):
|
||||
# Very basic dependency finder which scans for ".so" strings in the file
|
||||
try:
|
||||
with open(filepath, "rb") as file:
|
||||
content = file.read()
|
||||
return [
|
||||
m.group(0).decode("utf-8")
|
||||
for m in re.finditer(rb"[\w\-.]+\.so", content)
|
||||
]
|
||||
except IOError as e:
|
||||
eprint(f"Error: {e}")
|
||||
return []
|
||||
|
||||
|
||||
def extract_preload_files_from_imports(imports):
|
||||
libraries = []
|
||||
files = []
|
||||
for qml_import in imports:
|
||||
try:
|
||||
relative_path = qml_import["relativePath"]
|
||||
plugin = qml_import["plugin"]
|
||||
|
||||
# plugin .so
|
||||
so_plugin_source_path = os.path.join(
|
||||
qt_qml_path, relative_path, "lib" + plugin + ".so"
|
||||
)
|
||||
so_plugin_destination_path = os.path.join(
|
||||
qt_deploy_qml_path, relative_path, "lib" + plugin + ".so"
|
||||
)
|
||||
|
||||
preload_file(so_plugin_source_path, so_plugin_destination_path)
|
||||
so_plugin_qt_install_path = os.path.join(
|
||||
qt_wasm_path, "qml", relative_path, "lib" + plugin + ".so"
|
||||
)
|
||||
deps = find_dependencies(so_plugin_qt_install_path)
|
||||
libraries.extend(deps)
|
||||
|
||||
# qmldir file
|
||||
qmldir_source_path = os.path.join(qt_qml_path, relative_path, "qmldir")
|
||||
qmldir_destination_path = os.path.join(
|
||||
qt_deploy_qml_path, relative_path, "qmldir"
|
||||
)
|
||||
preload_file(qmldir_source_path, qmldir_destination_path)
|
||||
except Exception as e:
|
||||
eprint(e)
|
||||
continue
|
||||
return files, libraries
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 3:
|
||||
print("Usage: python make_qt_symlinks.py <qt-host-path> <qt-wasm-path>")
|
||||
sys.exit(1)
|
||||
|
||||
qt_host_path = sys.argv[1]
|
||||
qt_wasm_path = sys.argv[2]
|
||||
|
||||
qml_import_path = os.path.join(qt_wasm_path, "qml")
|
||||
qmlimportsscanner_path = os.path.join(qt_host_path, "libexec/qmlimportscanner")
|
||||
|
||||
eprint("runing qmlimportsscanner")
|
||||
result = subprocess.run(
|
||||
[qmlimportsscanner_path, "-rootPath", ".", "-importPath", qml_import_path],
|
||||
stdout=subprocess.PIPE,
|
||||
)
|
||||
imports = json.loads(result.stdout)
|
||||
|
||||
preload_files = []
|
||||
libraries = []
|
||||
files, libraries = extract_preload_files_from_imports(imports)
|
||||
|
||||
# Deploy plugin dependencies, that is, shared libraries used by the plugins.
|
||||
# Skip some of the obvious libraries which will be
|
||||
skip_libraries = [
|
||||
"libQt6Core.so",
|
||||
"libQt6Gui.so",
|
||||
"libQt6Quick.so",
|
||||
"libQt6Qml.so" "libQt6Network.so",
|
||||
"libQt6OpenGL.so",
|
||||
]
|
||||
|
||||
libraries = set(libraries) - set(skip_libraries)
|
||||
for library in libraries:
|
||||
source = os.path.join(qt_lib_path, library)
|
||||
# Emscripten looks for shared libraries on "/", shared libraries
|
||||
# most be deployed there instead of at /qt/lib
|
||||
destination = os.path.join("/", library)
|
||||
preload_file(source, destination)
|
||||
|
||||
print(json.dumps(preload_files, indent=2))
|
54
util/wasm/preload/preload_qt_plugins.py
Normal file
54
util/wasm/preload/preload_qt_plugins.py
Normal file
@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright (C) 2023 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
|
||||
# Path to plugins on the Qt installation on the web server. "$QTPATH" is replaced by qtloader.js
|
||||
# at load time (defaults to "qt"), which makes it possible to relocate the application build relative
|
||||
# to the Qt build on the web server.
|
||||
qt_plugins_path = "$QTDIR/plugins"
|
||||
|
||||
# Path to plugins on the in-memory file system provided by Emscripten. This script emits
|
||||
# preload commands which copies plugins to this directory.
|
||||
qt_deploy_plugins_path = "/qt/plugins"
|
||||
|
||||
|
||||
def find_so_files(directory):
|
||||
so_files = []
|
||||
for root, dirs, files in os.walk(directory):
|
||||
for file in files:
|
||||
if file.endswith(".so"):
|
||||
relative_path = os.path.relpath(os.path.join(root, file), directory)
|
||||
so_files.append(relative_path)
|
||||
return so_files
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: python make_qt_symlinks.py <qt-wasm-path>")
|
||||
sys.exit(1)
|
||||
|
||||
qt_wasm_path = sys.argv[1]
|
||||
|
||||
# preload all plugins
|
||||
plugins = find_so_files(os.path.join(qt_wasm_path, "plugins"))
|
||||
preload = [
|
||||
{
|
||||
"source": os.path.join(qt_plugins_path, plugin),
|
||||
"destination": os.path.join(qt_deploy_plugins_path, plugin),
|
||||
}
|
||||
for plugin in plugins
|
||||
]
|
||||
|
||||
# Create and preload qt.conf which will tell Qt to look for plugins
|
||||
# and QML imports in /qt/plugins and /qt/qml. The qt.conf file is
|
||||
# written to the current directory.
|
||||
qtconf = "[Paths]\nPrefix = /qt\n"
|
||||
with open("qt.conf", "w") as f:
|
||||
f.write(qtconf)
|
||||
preload.append({"source": "qt.conf", "destination": "/qt.conf"})
|
||||
|
||||
print(json.dumps(preload, indent=2))
|
77
util/x86simdgen/3rdparty/simd-intel.conf
vendored
77
util/x86simdgen/3rdparty/simd-intel.conf
vendored
@ -50,13 +50,13 @@ avx512vl Leaf07_00EBX 31 avx512f # AVX512 Vector Length
|
||||
avx512vbmi Leaf07_00ECX 1 avx512f # AVX512 Vector Byte Manipulation Instructions
|
||||
#pku Leaf07_00ECX 3 # Protection Keys for User mode
|
||||
#ospke Leaf07_00ECX 4 # Protection Keys Enabled by OS
|
||||
#waitpkg Leaf07_00ECX 5 # User-Level Monitor / Wait
|
||||
waitpkg Leaf07_00ECX 5 # User-Level Monitor / Wait
|
||||
avx512vbmi2 Leaf07_00ECX 6 avx512f # AVX512 Vector Byte Manipulation Instructions 2
|
||||
shstk Leaf07_00ECX 7 # Control Flow Enforcement Technology Shadow Stack
|
||||
gfni Leaf07_00ECX 8 # Galois Field new instructions
|
||||
vaes Leaf07_00ECX 9 avx2,avx,aes # 256- and 512-bit AES
|
||||
#vpclmulqdq Leaf07_00ECX 10 avx # 256- and 512-bit Carryless Multiply
|
||||
avx512vnni Leaf07_00ECX 11 avx512f # AVX512 Vector Neural Network Instructions
|
||||
#avx512vnni Leaf07_00ECX 11 avx512f # AVX512 Vector Neural Network Instructions
|
||||
avx512bitalg Leaf07_00ECX 12 avx512f # AVX512 Bit Algorithms
|
||||
avx512vpopcntdq Leaf07_00ECX 14 avx512f # AVX512 Population Count
|
||||
#la57 Leaf07_00ECX 16 # 5-level page tables
|
||||
@ -78,16 +78,24 @@ hybrid Leaf07_00EDX 15 # Hybrid processor
|
||||
ibt Leaf07_00EDX 20 # Control Flow Enforcement Technology Indirect Branch Tracking
|
||||
#amxbf16 Leaf07_00EDX 22 amxtile # AMX Tile multiplication in BFloat16
|
||||
avx512fp16 Leaf07_00EDX 23 avx512f,f16c # AVX512 16-bit Floating Point
|
||||
#amxtile Leaf07_00EDX 24 # Advanced Matrix Extensions Tile support
|
||||
#amxint8 Leaf07_00EDX 25 amxtile # AMX Tile multiplication for Int8
|
||||
#amx-tile Leaf07_00EDX 24 # Advanced Matrix Extensions Tile support
|
||||
#amx-int8 Leaf07_00EDX 25 amx-tile # AMX Tile multiplication for Int8
|
||||
raoint Leaf07_01EAX 3 # Remote Atomic Operations, Integer
|
||||
#avxvnni Leaf07_01EAX 4 avx # AVX (VEX-encoded) versions of the Vector Neural Network Instructions
|
||||
#avx512bf16 Leaf07_01EAX 5 avx512f # AVX512 Brain Float16
|
||||
cmpccxadd Leaf07_01EAX 6 # CMPccXADD instructions
|
||||
#zlmovsb Leaf07_01EAX 10 # Zero-length MOVSB
|
||||
#fsrs Leaf07_01EAX 11 # Fast Short (REP?) STOSB
|
||||
#fsrc Leaf07_01EAX 12 # Fast Short (REP?) CMPSB, SCASB
|
||||
#fred Leaf07_01EAX 17 # Flexible Return and Event Delivery
|
||||
#lkgs Leaf07_01EAX 18 # Load into Kernel GS
|
||||
#lam Leaf07_01EAX 26 # Linear Address Masking
|
||||
#amx-fp16 Leaf07_01EAX 21 amx-tile # AMX Tile multiplication in FP16
|
||||
avxifma Leaf07_01EAX 23 avx # AVX-IFMA instructions
|
||||
lam Leaf07_01EAX 26 # Linear Address Masking
|
||||
#avxvnniint8 Leaf07_01EDX 4 avx # AVX Vector Neural Network Instructions, Int8
|
||||
#avxneconvert Leaf07_01EDX 5 avx # AVX Non-Exception BF16/FP16/FP32 Conversion instructions
|
||||
#amx-complex Leaf07_01EDX 8 amx-tile # AMX Complex Matrix multiplication
|
||||
#prefetchiti Leaf07_01EDX 14 # PREFETCHIT0/1 instructions
|
||||
#xsaveopt Leaf13_01EAX 0 # Optimized XSAVE
|
||||
#xsavec Leaf13_01EAX 1 # XSAVE with Compaction
|
||||
#xgetbv1 Leaf13_01EAX 2 # XGETBV with ECX=1
|
||||
@ -122,12 +130,12 @@ xsave=AvxState SseState|Ymm_Hi128 avx,fma,avx512f
|
||||
xsave=MPXState Bndregs|Bndcsr mpx
|
||||
xsave=Avx512State AvxState|OpMask|Zmm_Hi256|Hi16_Zmm avx512f
|
||||
xsave=CetState CetUState|CetSState shstk
|
||||
xsave=AmxState Xtilecfg|Xtiledata amxtile
|
||||
xsave=AmxState Xtilecfg|Xtiledata amx-tile
|
||||
|
||||
# Processor/arch listing below this line
|
||||
# Source: Intel Instruction Set Extension manual, section 1.2
|
||||
# Source: GCC gcc/config/i386/i386.h, i386-c.c, i386-builtins.c
|
||||
# Architecture Based on New features Optional features
|
||||
# Architecture Based on New features
|
||||
arch=x86_64 <> sse2
|
||||
# Core line
|
||||
arch=Core2 x86_64 sse3,ssse3,cx16
|
||||
@ -135,26 +143,44 @@ arch=NHM Core2 sse4.1,sse4.2,popcnt
|
||||
arch=WSM NHM
|
||||
arch=SNB WSM avx
|
||||
arch=IVB SNB f16c,rdrnd,fsgsbase
|
||||
arch=HSW IVB avx2,fma,bmi,bmi2,lzcnt,movbe
|
||||
arch=HSW IVB avx2,fma,bmi,bmi2,lzcnt,movbe # hle,rtm
|
||||
arch=BDW HSW adx,rdseed
|
||||
arch=BDX BDW
|
||||
arch=SKL BDW xsavec,xsaves
|
||||
arch=ADL SKL avxvnni,gfni,vaes,vpclmulqdq,serialize,shstk,cldemote,movdiri,movdir64b,ibt,waitpkg,keylocker rdpid
|
||||
arch=SKX SKL avx512f,avx512dq,avx512cd,avx512bw,avx512vl clwb
|
||||
arch=SKX SKL avx512f,avx512dq,avx512cd,avx512bw,avx512vl #clwb
|
||||
arch=CLX SKX avx512vnni
|
||||
arch=CPX CLX avx512bf16
|
||||
arch=CNL SKX avx512ifma,avx512vbmi sha
|
||||
arch=ICL CNL avx512vbmi2,gfni,vaes,vpclmulqdq,avx512vnni,avx512bitalg,avx512vpopcntdq fsrm,rdpid
|
||||
arch=ICX ICL pconfig
|
||||
arch=TGL ICL avx512vp2intersect,shstk,,movdiri,movdir64b,ibt,keylocker
|
||||
arch=SPR TGL avx512bf16,amxtile,amxbf16,amxint8,avxvnni,cldemote,pconfig,waitpkg,serialize,tsxldtrk,uintr
|
||||
arch=PLC SKX avx512ifma,avx512vbmi #sha
|
||||
arch=SNC PLC avx512vbmi2,gfni,vaes,vpclmulqdq,avx512vnni,avx512bitalg,avx512vpopcntdq #fsrm,rdpid
|
||||
arch=WLC SNC shstk,movdiri,movdir64b,ibt,keylocker # avx512vp2intersect
|
||||
arch=GLC WLC avx512bf16,avxvnni,cldemote,waitpkg,serialize,uintr # tsxldtrk
|
||||
arch=RPC GLC
|
||||
arch=RWC RPC prefetchiti
|
||||
# Atom line
|
||||
arch=SLM WSM rdrnd,movbe
|
||||
arch=GLM SLM fsgsbase,rdseed,lzcnt,xsavec,xsaves
|
||||
arch=TNT GLM clwb,gfni,cldemote,waitpkg,movdiri,movdir64b
|
||||
arch=GRT SKL avxvnni,gfni,vaes,vpclmulqdq,serialize,shstk,cldemote,movdiri,movdir64b,ibt,waitpkg,keylocker # rdpid
|
||||
arch=CMT GRT cmpccxadd,avxifma,avxneconvert,avxvnniint8
|
||||
# Xeon Phi line
|
||||
#arch=KNL SKL avx512f,avx512er,avx512pf,avx512cd
|
||||
#arch=KNM KNL avx5124fmaps,avx5124vnniw,avx512vpopcntdq
|
||||
# Hybrids and other names
|
||||
arch=CNL PLC
|
||||
arch=ICL SNC
|
||||
arch=TGL WLC
|
||||
arch=ADL GRT
|
||||
arch=RPL GRT
|
||||
arch=MTL CMT
|
||||
arch=ARL CMT
|
||||
arch=LNL CMT
|
||||
arch=ICX SNC pconfig
|
||||
arch=SPR GLC pconfig,amx-tile,amx-bf16,amx-int8
|
||||
arch=EMR SPR
|
||||
arch=GNR GLC pconfig,amx-tile,amx-bf16,amx-int8,amx-fp16,amx-complex
|
||||
arch=SRF CMT cmpccxadd,avxifma,avxneconvert,avxvnniint8
|
||||
arch=GRR SRF raoint
|
||||
arch=CWF SRF
|
||||
# Longer names
|
||||
arch=Nehalem NHM # Intel Core i3/i5/i7
|
||||
arch=Westmere WSM # Intel Core i3/i5/i7
|
||||
@ -166,14 +192,31 @@ arch=Skylake SKL # Sixth Generation Intel Core i3/i5/i7
|
||||
arch=Skylake-Avx512 SKX # Intel Xeon Scalable
|
||||
arch=CascadeLake CLX # Second Generation Intel Xeon Scalable
|
||||
arch=CooperLake CPX # Third Generation Intel Xeon Scalable
|
||||
arch=PalmCove PLC
|
||||
arch=CannonLake CNL # Intel Core i3-8121U
|
||||
arch=SunnyCove SNC
|
||||
arch=IceLake-Client ICL # Tenth Generation Intel Core i3/i5/i7
|
||||
arch=IceLake-Server ICX # Third Generation Intel Xeon Scalable
|
||||
arch=AlderLake ADL
|
||||
arch=SapphireRapids SPR
|
||||
arch=WillowCove WLC
|
||||
arch=TigerLake TGL # Eleventh Generation Intel Core i3/i5/i7
|
||||
arch=GoldenCove GLC
|
||||
arch=AlderLake ADL # Twelfth Generation Intel Core
|
||||
arch=RaptorCove RPC
|
||||
arch=RaptorLake RPL # Thirteenth Generation Intel Core
|
||||
arch=RedwoodCove RWC
|
||||
arch=MeteorLake MTL
|
||||
arch=ArrowLake ARL
|
||||
arch=LunarLake LNL
|
||||
arch=SapphireRapids SPR # Fourth Generation Intel Xeon Scalable
|
||||
arch=EmeraldRapids EMR # Fifth Generation Intel Xeon Scalable
|
||||
arch=GraniteRapids GNR
|
||||
arch=Silvermont SLM
|
||||
arch=Goldmont GLM
|
||||
arch=Tremont TNT
|
||||
arch=Gracemont GRT
|
||||
arch=Crestmont CMT
|
||||
arch=GrandRidge GRR
|
||||
arch=SierraForest SRF
|
||||
arch=ClearwaterForest CWF
|
||||
#arch=KnightsLanding KNL
|
||||
#arch=KnightsMill KNM
|
||||
|
5
util/x86simdgen/3rdparty/x86simd_generate.pl
vendored
5
util/x86simdgen/3rdparty/x86simd_generate.pl
vendored
@ -13,6 +13,7 @@ my %leaves = (
|
||||
Leaf07_00ECX => "CPUID Leaf 7, Sub-leaf 0, ECX",
|
||||
Leaf07_00EDX => "CPUID Leaf 7, Sub-leaf 0, EDX",
|
||||
Leaf07_01EAX => "CPUID Leaf 7, Sub-leaf 1, EAX",
|
||||
Leaf07_01EDX => "CPUID Leaf 7, Sub-leaf 1, EDX",
|
||||
Leaf13_01EAX => "CPUID Leaf 13, Sub-leaf 1, EAX",
|
||||
Leaf80000001hECX => "CPUID Leaf 80000001h, ECX",
|
||||
Leaf80000008hEBX => "CPUID Leaf 80000008h, EBX",
|
||||
@ -258,7 +259,7 @@ print "\nenum X86CpuidLeaves {";
|
||||
map { print " $_," } @leafNames;
|
||||
print " X86CpuidMaxLeaf\n};";
|
||||
|
||||
my $type = scalar %leaves > 8 ? "uint16_t" : "uint8_t";
|
||||
my $type = scalar keys %leaves > 8 ? "uint16_t" : "uint8_t";
|
||||
printf "\nstatic const %s x86_locators[] = {\n",
|
||||
$type, $type;
|
||||
for (my $j = 0; $j < scalar @features; ++$j) {
|
||||
@ -283,7 +284,7 @@ struct X86Architecture
|
||||
};
|
||||
|
||||
static const struct X86Architecture x86_architectures[] = {|;
|
||||
for (sort { $b <=> $a } keys %sorted_archs) {
|
||||
for (sort keys %sorted_archs) {
|
||||
my $arch = $sorted_archs{$_};
|
||||
next if $arch->{base} eq "<>";
|
||||
printf " { cpu_%s, \"%s\" },\n", $arch->{id}, $arch->{prettyname};
|
||||
|
@ -14,9 +14,7 @@ $(TARGETDIR)/$(TARGETHEADER): header $(TARGETHEADER)
|
||||
sed '/-- implementation start --/,/-- implementation end --/d' $^ | \
|
||||
sed 's!3rdparty/x86simd_generate\.pl!util/x86simdgen/README.md!' > $@
|
||||
$(TARGETDIR)/$(TARGETCPP): $(TARGETHEADER) header
|
||||
(cat header | grep -v '^//' | grep .; echo; \
|
||||
echo '// This is a generated file. DO NOT EDIT.'; \
|
||||
echo '// Please see util/x86simdgen/README.md'; \
|
||||
(sed '/^$$/q' header; \
|
||||
echo '#include "$(TARGETHEADER)"'; \
|
||||
sed '1,/-- implementation start --/d;/-- implementation end --/,$$d' $<) > $@
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
// Copyright (C) 2022 Intel Corporation.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// This is a generated file. DO NOT EDIT.
|
||||
// Please see util/x86simdgen/README.md
|
||||
|
||||
//
|
||||
// W A R N I N G
|
||||
|
Reference in New Issue
Block a user