mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-26 13:01:27 +03:00
Merge commit '493d427c7d3423f085f05179e36a35b4943b1379' into sync_cg_clif-2026-03-25
This commit is contained in:
@@ -43,7 +43,7 @@ jobs:
|
||||
# TARGET_TRIPLE: x86_64-pc-windows-gnu
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: CPU features
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
@@ -56,7 +56,7 @@ jobs:
|
||||
run: .github/scripts/free-disk-space.sh
|
||||
|
||||
- name: Cache cargo target dir
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: build/cg_clif
|
||||
key: ${{ runner.os }}-${{ matrix.env.TARGET_TRIPLE }}-cargo-build-target-${{ hashFiles('rust-toolchain', '**/Cargo.lock') }}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
name: Security audit
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 10 * * 1' # every monday at 10:00 UTC
|
||||
permissions:
|
||||
issues: write
|
||||
checks: write
|
||||
jobs:
|
||||
audit:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: |
|
||||
sed -i 's/components.*/components = []/' rust-toolchain.toml
|
||||
- uses: rustsec/audit-check@v2.0.0
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
+21
-11
@@ -19,12 +19,22 @@ env:
|
||||
RUSTFLAGS: "-Dwarnings"
|
||||
|
||||
jobs:
|
||||
todo_check:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Check todo
|
||||
run: ./y.sh check-todo
|
||||
|
||||
rustfmt:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Avoid installing rustc-dev
|
||||
run: |
|
||||
@@ -78,14 +88,14 @@ jobs:
|
||||
TARGET_TRIPLE: x86_64-pc-windows-gnu
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: CPU features
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: cat /proc/cpuinfo
|
||||
|
||||
- name: Cache cargo target dir
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: build/cg_clif
|
||||
key: ${{ runner.os }}-${{ matrix.env.TARGET_TRIPLE }}-cargo-build-target-${{ hashFiles('rust-toolchain.toml', '**/Cargo.lock') }}
|
||||
@@ -127,7 +137,7 @@ jobs:
|
||||
timeout-minutes: 60
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: CPU features
|
||||
run: cat /proc/cpuinfo
|
||||
@@ -149,13 +159,13 @@ jobs:
|
||||
timeout-minutes: 60
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: CPU features
|
||||
run: cat /proc/cpuinfo
|
||||
|
||||
- name: Cache cargo target dir
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: build/cg_clif
|
||||
key: ${{ runner.os }}-x86_64-unknown-linux-gnu-cargo-build-target-${{ hashFiles('rust-toolchain.toml', '**/Cargo.lock') }}
|
||||
@@ -201,10 +211,10 @@ jobs:
|
||||
TARGET_TRIPLE: x86_64-pc-windows-gnu
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Cache cargo target dir
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: build/cg_clif
|
||||
key: ${{ runner.os }}-${{ matrix.env.TARGET_TRIPLE }}-dist-cargo-build-target-${{ hashFiles('rust-toolchain.toml', '**/Cargo.lock') }}
|
||||
@@ -223,7 +233,7 @@ jobs:
|
||||
run: tar cvfJ cg_clif.tar.xz dist
|
||||
|
||||
- name: Upload prebuilt cg_clif
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: cg_clif-${{ matrix.env.TARGET_TRIPLE }}
|
||||
path: cg_clif.tar.xz
|
||||
@@ -232,7 +242,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
if: ${{ github.ref == 'refs/heads/main' }}
|
||||
needs: [rustfmt, test, bench, dist]
|
||||
needs: [todo_check, rustfmt, test, bench, dist]
|
||||
|
||||
permissions:
|
||||
contents: write # for creating the dev tag and release
|
||||
@@ -242,7 +252,7 @@ jobs:
|
||||
cancel-in-progress: true
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Download all built artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
@@ -11,13 +11,13 @@ jobs:
|
||||
timeout-minutes: 60
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: CPU features
|
||||
run: cat /proc/cpuinfo
|
||||
|
||||
- name: Cache cargo target dir
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: build/cg_clif
|
||||
key: ${{ runner.os }}-rustc-test-cargo-build-target-${{ hashFiles('rust-toolchain.toml', 'Cargo.lock') }}
|
||||
@@ -31,13 +31,13 @@ jobs:
|
||||
timeout-minutes: 60
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: CPU features
|
||||
run: cat /proc/cpuinfo
|
||||
|
||||
- name: Cache cargo target dir
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: build/cg_clif
|
||||
key: ${{ runner.os }}-rustc-test-cargo-build-target-${{ hashFiles('rust-toolchain.toml', 'Cargo.lock') }}
|
||||
|
||||
@@ -28,9 +28,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bumpalo"
|
||||
version = "3.19.1"
|
||||
version = "3.20.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
|
||||
checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
|
||||
dependencies = [
|
||||
"allocator-api2",
|
||||
]
|
||||
@@ -43,42 +43,46 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-assembler-x64"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0377b13bf002a0774fcccac4f1102a10f04893d24060cf4b7350c87e4cbb647c"
|
||||
checksum = "4f248321c6a7d4de5dcf2939368e96a397ad3f53b6a076e38d0104d1da326d37"
|
||||
dependencies = [
|
||||
"cranelift-assembler-x64-meta",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-assembler-x64-meta"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cfa027979140d023b25bf7509fb7ede3a54c3d3871fb5ead4673c4b633f671a2"
|
||||
checksum = "ab6d78ff1f7d9bf8b7e1afbedbf78ba49e38e9da479d4c8a2db094e22f64e2bc"
|
||||
dependencies = [
|
||||
"cranelift-srcgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-bforest"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "618e4da87d9179a70b3c2f664451ca8898987aa6eb9f487d16988588b5d8cc40"
|
||||
checksum = "6b6005ba640213a5b95382aeaf6b82bf028309581c8d7349778d66f27dc1180b"
|
||||
dependencies = [
|
||||
"cranelift-entity",
|
||||
"wasmtime-internal-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-bitset"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "db53764b5dad233b37b8f5dc54d3caa9900c54579195e00f17ea21f03f71aaa7"
|
||||
checksum = "81fb5b134a12b559ff0c0f5af0fcd755ad380723b5016c4e0d36f74d39485340"
|
||||
dependencies = [
|
||||
"wasmtime-internal-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-codegen"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ae927f1d8c0abddaa863acd201471d56e7fc6c3925104f4861ed4dc3e28b421"
|
||||
checksum = "85837de8be7f17a4034a6b08816f05a3144345d2091937b39d415990daca28f4"
|
||||
dependencies = [
|
||||
"bumpalo",
|
||||
"cranelift-assembler-x64",
|
||||
@@ -90,21 +94,22 @@ dependencies = [
|
||||
"cranelift-entity",
|
||||
"cranelift-isle",
|
||||
"gimli",
|
||||
"hashbrown",
|
||||
"hashbrown 0.16.1",
|
||||
"libm",
|
||||
"log",
|
||||
"regalloc2",
|
||||
"rustc-hash",
|
||||
"serde",
|
||||
"smallvec",
|
||||
"target-lexicon",
|
||||
"wasmtime-internal-math",
|
||||
"wasmtime-internal-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-codegen-meta"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3fcf1e3e6757834bd2584f4cbff023fcc198e9279dcb5d684b4bb27a9b19f54"
|
||||
checksum = "e433faa87d38e5b8ff469e44a26fea4f93e58abd7a7c10bad9810056139700c9"
|
||||
dependencies = [
|
||||
"cranelift-assembler-x64-meta",
|
||||
"cranelift-codegen-shared",
|
||||
@@ -114,33 +119,34 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-codegen-shared"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "205dcb9e6ccf9d368b7466be675ff6ee54a63e36da6fe20e72d45169cf6fd254"
|
||||
checksum = "5397ba61976e13944ca71230775db13ee1cb62849701ed35b753f4761ed0a9b7"
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-control"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "108eca9fcfe86026054f931eceaf57b722c1b97464bf8265323a9b5877238817"
|
||||
checksum = "cc81c88765580720eb30f4fc2c1bfdb75fcbf3094f87b3cd69cecca79d77a245"
|
||||
dependencies = [
|
||||
"arbitrary",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-entity"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a0d96496910065d3165f84ff8e1e393916f4c086f88ac8e1b407678bc78735aa"
|
||||
checksum = "463feed5d46cf8763f3ba3045284cf706dd161496e20ec9c14afbb4ba09b9e66"
|
||||
dependencies = [
|
||||
"cranelift-bitset",
|
||||
"wasmtime-internal-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-frontend"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e303983ad7e23c850f24d9c41fc3cb346e1b930f066d3966545e4c98dac5c9fb"
|
||||
checksum = "a4c5eca7696c1c04ab4c7ed8d18eadbb47d6cc9f14ec86fe0881bf1d7e97e261"
|
||||
dependencies = [
|
||||
"cranelift-codegen",
|
||||
"log",
|
||||
@@ -150,15 +156,15 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-isle"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "24b0cf8d867d891245836cac7abafb0a5b0ea040a019d720702b3b8bcba40bfa"
|
||||
checksum = "f1153844610cc9c6da8cf10ce205e45da1a585b7688ed558aa808bbe2e4e6d77"
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-jit"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dcf1e35da6eca2448395f483eb172ce71dd7842f7dc96f44bb8923beafe43c6d"
|
||||
checksum = "41836de8321b303d3d4188e58cc09c30c7645337342acfcfb363732695cae098"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"cranelift-codegen",
|
||||
@@ -176,9 +182,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-module"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "792ba2a54100e34f8a36e3e329a5207cafd1f0918a031d34695db73c163fdcc7"
|
||||
checksum = "b731f66cb1b69b60a74216e632968ebdbb95c488d26aa1448ec226ae0ffec33e"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"cranelift-codegen",
|
||||
@@ -187,9 +193,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-native"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e24b641e315443e27807b69c440fe766737d7e718c68beb665a2d69259c77bf3"
|
||||
checksum = "a97b583fe9a60f06b0464cee6be5a17f623fd91b217aaac99b51b339d19911af"
|
||||
dependencies = [
|
||||
"cranelift-codegen",
|
||||
"libc",
|
||||
@@ -198,9 +204,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-object"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ecba1f219a201cf946150538e631defd620c5051b62c52ecb89a0004bab263d4"
|
||||
checksum = "9809d2d419cd18f17377f4ce64a7ad22eeda0d042c08833d3796657f1ddebc82"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"cranelift-codegen",
|
||||
@@ -213,9 +219,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cranelift-srcgen"
|
||||
version = "0.128.3"
|
||||
version = "0.130.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a4e378a54e7168a689486d67ee1f818b7e5356e54ae51a1d7a53f4f13f7f8b7a"
|
||||
checksum = "8594dc6bb4860fa8292f1814c76459dbfb933e1978d8222de6380efce45c7cee"
|
||||
|
||||
[[package]]
|
||||
name = "crc32fast"
|
||||
@@ -233,24 +239,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
||||
|
||||
[[package]]
|
||||
name = "fallible-iterator"
|
||||
version = "0.3.0"
|
||||
name = "fnv"
|
||||
version = "1.0.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
|
||||
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||
|
||||
[[package]]
|
||||
name = "foldhash"
|
||||
version = "0.1.5"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
||||
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.32.3"
|
||||
version = "0.33.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
|
||||
checksum = "0bf7f043f89559805f8c7cacc432749b2fa0d0a0a9ee46ce47164ed5ba7f126c"
|
||||
dependencies = [
|
||||
"fallible-iterator",
|
||||
"fnv",
|
||||
"hashbrown 0.16.1",
|
||||
"indexmap",
|
||||
"stable_deref_trait",
|
||||
]
|
||||
@@ -260,6 +267,12 @@ name = "hashbrown"
|
||||
version = "0.15.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.16.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
|
||||
dependencies = [
|
||||
"foldhash",
|
||||
]
|
||||
@@ -272,12 +285,12 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.10.0"
|
||||
version = "2.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
|
||||
checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown",
|
||||
"hashbrown 0.16.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -325,12 +338,12 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.37.3"
|
||||
version = "0.38.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe"
|
||||
checksum = "271638cd5fa9cca89c4c304675ca658efc4e64a66c716b7cfe1afb4b9611dbbc"
|
||||
dependencies = [
|
||||
"crc32fast",
|
||||
"hashbrown",
|
||||
"hashbrown 0.16.1",
|
||||
"indexmap",
|
||||
"memchr",
|
||||
]
|
||||
@@ -355,13 +368,13 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "regalloc2"
|
||||
version = "0.13.5"
|
||||
version = "0.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08effbc1fa53aaebff69521a5c05640523fab037b34a4a2c109506bc938246fa"
|
||||
checksum = "952ddbfc6f9f64d006c3efd8c9851a6ba2f2b944ba94730db255d55006e0ffda"
|
||||
dependencies = [
|
||||
"allocator-api2",
|
||||
"bumpalo",
|
||||
"hashbrown",
|
||||
"hashbrown 0.15.5",
|
||||
"log",
|
||||
"rustc-hash",
|
||||
"smallvec",
|
||||
@@ -468,24 +481,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
|
||||
|
||||
[[package]]
|
||||
name = "wasmtime-internal-jit-icache-coherence"
|
||||
version = "41.0.3"
|
||||
name = "wasmtime-internal-core"
|
||||
version = "43.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bada5ca1cc47df7d14100e2254e187c2486b426df813cea2dd2553a7469f7674"
|
||||
checksum = "e671917bb6856ae360cb59d7aaf26f1cfd042c7b924319dd06fd380739fc0b2e"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"windows-sys 0.61.2",
|
||||
"hashbrown 0.16.1",
|
||||
"libm",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasmtime-internal-math"
|
||||
version = "41.0.3"
|
||||
name = "wasmtime-internal-jit-icache-coherence"
|
||||
version = "43.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf6f615d528eda9adc6eefb062135f831b5215c348f4c3ec3e143690c730605b"
|
||||
checksum = "9b3112806515fac8495883885eb8dbdde849988ae91fe6beb544c0d7c0f4c9aa"
|
||||
dependencies = [
|
||||
"libm",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasmtime-internal-core",
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -8,15 +8,15 @@ crate-type = ["dylib"]
|
||||
|
||||
[dependencies]
|
||||
# These have to be in sync with each other
|
||||
cranelift-codegen = { version = "0.128.3", default-features = false, features = ["std", "timing", "unwind", "all-native-arch"] }
|
||||
cranelift-frontend = { version = "0.128.3" }
|
||||
cranelift-module = { version = "0.128.3" }
|
||||
cranelift-native = { version = "0.128.3" }
|
||||
cranelift-jit = { version = "0.128.3", optional = true }
|
||||
cranelift-object = { version = "0.128.3" }
|
||||
cranelift-codegen = { version = "0.130.0", default-features = false, features = ["std", "timing", "unwind", "all-native-arch"] }
|
||||
cranelift-frontend = { version = "0.130.0" }
|
||||
cranelift-module = { version = "0.130.0" }
|
||||
cranelift-native = { version = "0.130.0" }
|
||||
cranelift-jit = { version = "0.130.0", optional = true }
|
||||
cranelift-object = { version = "0.130.0" }
|
||||
target-lexicon = "0.13"
|
||||
gimli = { version = "0.32", default-features = false, features = ["write"] }
|
||||
object = { version = "0.37.3", default-features = false, features = ["std", "read_core", "write", "archive", "coff", "elf", "macho", "pe"] }
|
||||
gimli = { version = "0.33", default-features = false, features = ["write"] }
|
||||
object = { version = "0.38.0", default-features = false, features = ["std", "read_core", "write", "archive", "coff", "elf", "macho", "pe"] }
|
||||
|
||||
indexmap = "2.0.0"
|
||||
libloading = { version = "0.9.0", optional = true }
|
||||
@@ -24,12 +24,12 @@ smallvec = "1.8.1"
|
||||
|
||||
[patch.crates-io]
|
||||
# Uncomment to use an unreleased version of cranelift
|
||||
#cranelift-codegen = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
|
||||
#cranelift-frontend = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
|
||||
#cranelift-module = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
|
||||
#cranelift-native = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
|
||||
#cranelift-jit = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
|
||||
#cranelift-object = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
|
||||
#cranelift-codegen = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
|
||||
#cranelift-frontend = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
|
||||
#cranelift-module = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
|
||||
#cranelift-native = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
|
||||
#cranelift-jit = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
|
||||
#cranelift-object = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
|
||||
|
||||
# Uncomment to use local checkout of cranelift
|
||||
#cranelift-codegen = { path = "../wasmtime/cranelift/codegen" }
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
mod rustc_info;
|
||||
mod shared_utils;
|
||||
mod tests;
|
||||
mod todo;
|
||||
mod utils;
|
||||
|
||||
fn usage() {
|
||||
@@ -38,6 +39,7 @@ enum Command {
|
||||
Test,
|
||||
AbiCafe,
|
||||
Bench,
|
||||
CheckTodo,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
@@ -66,6 +68,7 @@ fn main() {
|
||||
Some("test") => Command::Test,
|
||||
Some("abi-cafe") => Command::AbiCafe,
|
||||
Some("bench") => Command::Bench,
|
||||
Some("check-todo") => Command::CheckTodo,
|
||||
Some(flag) if flag.starts_with('-') => arg_error!("Expected command found flag {}", flag),
|
||||
Some(command) => arg_error!("Unknown command {}", command),
|
||||
None => {
|
||||
@@ -139,6 +142,10 @@ fn main() {
|
||||
process::exit(0);
|
||||
}
|
||||
|
||||
if command == Command::CheckTodo {
|
||||
todo::run();
|
||||
}
|
||||
|
||||
let rustup_toolchain_name = match (env::var("CARGO"), env::var("RUSTC"), env::var("RUSTDOC")) {
|
||||
(Ok(_), Ok(_), Ok(_)) => None,
|
||||
(_, Err(_), Err(_)) => Some(rustc_info::get_toolchain_name()),
|
||||
@@ -202,7 +209,7 @@ fn main() {
|
||||
))
|
||||
};
|
||||
match command {
|
||||
Command::Prepare => {
|
||||
Command::Prepare | Command::CheckTodo => {
|
||||
// Handled above
|
||||
}
|
||||
Command::Test => {
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
use std::ffi::OsStr;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::process::Command;
|
||||
use std::{fs, process};
|
||||
|
||||
const EXTENSIONS: &[&str] =
|
||||
&["rs", "py", "js", "sh", "c", "cpp", "h", "md", "css", "ftl", "toml", "yml", "yaml"];
|
||||
|
||||
fn has_supported_extension(path: &Path) -> bool {
|
||||
path.extension().is_some_and(|ext| EXTENSIONS.iter().any(|e| ext == OsStr::new(e)))
|
||||
}
|
||||
|
||||
fn list_tracked_files() -> Result<Vec<PathBuf>, String> {
|
||||
let output = Command::new("git")
|
||||
.args(["ls-files", "-z"])
|
||||
.output()
|
||||
.map_err(|e| format!("Failed to run `git ls-files`: {e}"))?;
|
||||
|
||||
if !output.status.success() {
|
||||
let stderr = String::from_utf8_lossy(&output.stderr);
|
||||
return Err(format!("`git ls-files` failed: {stderr}"));
|
||||
}
|
||||
|
||||
let mut files = Vec::new();
|
||||
for entry in output.stdout.split(|b| *b == 0) {
|
||||
if entry.is_empty() {
|
||||
continue;
|
||||
}
|
||||
let path = std::str::from_utf8(entry).unwrap();
|
||||
files.push(PathBuf::from(path));
|
||||
}
|
||||
|
||||
Ok(files)
|
||||
}
|
||||
|
||||
pub(crate) fn run() -> ! {
|
||||
let files = list_tracked_files().unwrap();
|
||||
let mut error_count = 0;
|
||||
// Avoid embedding the task marker in source so greps only find real occurrences.
|
||||
let todo_marker = "todo".to_ascii_uppercase();
|
||||
|
||||
for file in files {
|
||||
if !has_supported_extension(&file) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let bytes = fs::read(&file).unwrap();
|
||||
let contents = std::str::from_utf8(&bytes).unwrap();
|
||||
|
||||
for (i, line) in contents.split('\n').enumerate() {
|
||||
let trimmed = line.trim();
|
||||
if trimmed.contains(&todo_marker) {
|
||||
eprintln!(
|
||||
"{}:{}: {} is used for tasks that should be done before merging a PR; if you want to leave a message in the codebase use FIXME",
|
||||
file.display(),
|
||||
i + 1,
|
||||
todo_marker
|
||||
);
|
||||
error_count += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if error_count == 0 {
|
||||
process::exit(0);
|
||||
}
|
||||
|
||||
eprintln!("found {} {}(s)", error_count, todo_marker);
|
||||
process::exit(1);
|
||||
}
|
||||
@@ -6,6 +6,7 @@ USAGE:
|
||||
./y.sh test [--sysroot none|clif|llvm] [--out-dir DIR] [--download-dir DIR] [--no-unstable-features] [--frozen] [--skip-test TESTNAME]
|
||||
./y.sh abi-cafe [--sysroot none|clif|llvm] [--out-dir DIR] [--download-dir DIR] [--no-unstable-features] [--frozen]
|
||||
./y.sh bench [--sysroot none|clif|llvm] [--out-dir DIR] [--download-dir DIR] [--no-unstable-features] [--frozen]
|
||||
./y.sh check-todo
|
||||
|
||||
OPTIONS:
|
||||
--sysroot none|clif|llvm
|
||||
|
||||
@@ -2,9 +2,3 @@
|
||||
set -e
|
||||
|
||||
rm -rf target/ build_system/target download/ build/ dist/
|
||||
|
||||
# Kept for now in case someone updates their checkout of cg_clif before running clean_all.sh
|
||||
# FIXME remove at some point in the future
|
||||
rm y.bin y.bin.dSYM y.exe y.pdb 2>/dev/null || true
|
||||
rm -rf rand/ regex/ simple-raytracer/ portable-simd/ abi-checker/ abi-cafe/
|
||||
rm -rf build_sysroot/{sysroot_src/,target/,compiler-builtins/,rustc_version}
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
rustc_private,
|
||||
transparent_unions,
|
||||
auto_traits,
|
||||
freeze_impls,
|
||||
thread_local
|
||||
freeze_impls
|
||||
)]
|
||||
#![cfg_attr(not(all(windows, target_env = "gnu")), feature(thread_local))]
|
||||
#![no_core]
|
||||
#![allow(dead_code, internal_features, ambiguous_wide_pointer_comparisons)]
|
||||
|
||||
|
||||
@@ -1,13 +1,5 @@
|
||||
#![feature(
|
||||
no_core,
|
||||
lang_items,
|
||||
never_type,
|
||||
linkage,
|
||||
extern_types,
|
||||
thread_local,
|
||||
repr_simd,
|
||||
rustc_private
|
||||
)]
|
||||
#![feature(no_core, lang_items, never_type, extern_types, thread_local, repr_simd, rustc_private)]
|
||||
#![cfg_attr(not(any(jit, target_vendor = "apple", windows)), feature(linkage))]
|
||||
#![no_core]
|
||||
#![allow(dead_code, non_camel_case_types, internal_features)]
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Most of these tests are copied from https://github.com/japaric/stdsimd/blob/0f4413d01c4f0c3ffbc5a69e9a37fbc7235b31a9/coresimd/arm/neon.rs
|
||||
|
||||
#![feature(portable_simd)]
|
||||
#![cfg_attr(target_arch = "aarch64", feature(portable_simd))]
|
||||
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
use std::arch::aarch64::*;
|
||||
|
||||
@@ -1,14 +1,8 @@
|
||||
#![feature(
|
||||
core_intrinsics,
|
||||
coroutines,
|
||||
stmt_expr_attributes,
|
||||
coroutine_trait,
|
||||
repr_simd,
|
||||
tuple_trait,
|
||||
unboxed_closures
|
||||
)]
|
||||
#![feature(core_intrinsics, coroutines, coroutine_trait, repr_simd, tuple_trait, unboxed_closures)]
|
||||
#![allow(internal_features)]
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
use std::arch::asm;
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
use std::arch::x86_64::*;
|
||||
use std::hint::black_box;
|
||||
@@ -173,6 +167,9 @@ enum Never {}
|
||||
|
||||
rust_call_abi();
|
||||
|
||||
// #[cfg(target_arch = "x86_64")]
|
||||
// inline_asm_call_custom_abi();
|
||||
|
||||
const fn no_str() -> Option<Box<str>> {
|
||||
None
|
||||
}
|
||||
@@ -279,6 +276,17 @@ unsafe fn test_simd() {
|
||||
|
||||
#[cfg(not(jit))]
|
||||
test_crc32();
|
||||
|
||||
#[cfg(not(jit))]
|
||||
test_xmm_roundtrip();
|
||||
#[cfg(not(jit))]
|
||||
if is_x86_feature_detected!("avx") {
|
||||
test_ymm_roundtrip();
|
||||
}
|
||||
#[cfg(not(jit))]
|
||||
if is_x86_feature_detected!("avx512f") {
|
||||
test_zmm_roundtrip();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -576,6 +584,65 @@ unsafe fn test_mm_cvtps_ph() {
|
||||
assert_eq_m128i(r, e);
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
#[cfg(not(jit))]
|
||||
unsafe fn test_xmm_roundtrip() {
|
||||
unsafe {
|
||||
let input = [1u8; 16];
|
||||
let mut output = [0u8; 16];
|
||||
|
||||
asm!(
|
||||
"movups {xmm}, [{input}]",
|
||||
"movups [{output}], {xmm}",
|
||||
input = in(reg) input.as_ptr(),
|
||||
output = in(reg) output.as_mut_ptr(),
|
||||
xmm = out(xmm_reg) _,
|
||||
);
|
||||
|
||||
assert_eq!(input, output);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
#[target_feature(enable = "avx")]
|
||||
#[cfg(not(jit))]
|
||||
unsafe fn test_ymm_roundtrip() {
|
||||
unsafe {
|
||||
let input = [1u8; 32];
|
||||
let mut output = [0u8; 32];
|
||||
|
||||
asm!(
|
||||
"vmovups {ymm}, [{input}]",
|
||||
"vmovups [{output}], {ymm}",
|
||||
input = in(reg) input.as_ptr(),
|
||||
output = in(reg) output.as_mut_ptr(),
|
||||
ymm = out(ymm_reg) _,
|
||||
);
|
||||
|
||||
assert_eq!(input, output);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
#[target_feature(enable = "avx512f")]
|
||||
#[cfg(not(jit))]
|
||||
unsafe fn test_zmm_roundtrip() {
|
||||
unsafe {
|
||||
let input = [1u8; 64];
|
||||
let mut output = [0u8; 64];
|
||||
|
||||
asm!(
|
||||
"vmovups {zmm}, [{input}]",
|
||||
"vmovups [{output}], {zmm}",
|
||||
input = in(reg) input.as_ptr(),
|
||||
output = in(reg) output.as_mut_ptr(),
|
||||
zmm = out(zmm_reg) _,
|
||||
);
|
||||
|
||||
assert_eq!(input, output);
|
||||
}
|
||||
}
|
||||
|
||||
fn test_checked_mul() {
|
||||
let u: Option<u8> = u8::from_str_radix("1000", 10).ok();
|
||||
assert_eq!(u, None);
|
||||
@@ -614,3 +681,18 @@ fn map(a: Option<(u8, Box<Instruction>)>) -> Option<Box<Instruction>> {
|
||||
Some((_, instr)) => Some(instr),
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME enable once inline asm sym references are stabilized in cg_clif
|
||||
// #[cfg(target_arch = "x86_64")]
|
||||
// fn inline_asm_call_custom_abi() {
|
||||
// use std::arch::{asm, naked_asm};
|
||||
//
|
||||
// #[unsafe(naked)]
|
||||
// unsafe extern "custom" fn double() {
|
||||
// naked_asm!("add rax, rax", "ret");
|
||||
// }
|
||||
//
|
||||
// let mut x: u64 = 21;
|
||||
// unsafe { asm!("call {}", sym double, inout("rax") x) };
|
||||
// assert_eq!(x, 42);
|
||||
// }
|
||||
|
||||
+1
-12
@@ -37,16 +37,7 @@ diff --git a/library/core/src/sync/atomic.rs b/library/core/src/sync/atomic.rs
|
||||
index bf2b6d59f88..d5ccce03bbf 100644
|
||||
--- a/library/core/src/sync/atomic.rs
|
||||
+++ b/library/core/src/sync/atomic.rs
|
||||
@@ -300,8 +300,6 @@ impl_atomic_primitive!(AtomicI32(i32), size("32"), align(4));
|
||||
impl_atomic_primitive!(AtomicU32(u32), size("32"), align(4));
|
||||
impl_atomic_primitive!(AtomicI64(i64), size("64"), align(8));
|
||||
impl_atomic_primitive!(AtomicU64(u64), size("64"), align(8));
|
||||
-impl_atomic_primitive!(AtomicI128(i128), size("128"), align(16));
|
||||
-impl_atomic_primitive!(AtomicU128(u128), size("128"), align(16));
|
||||
|
||||
#[cfg(target_pointer_width = "16")]
|
||||
impl_atomic_primitive!(AtomicIsize(isize), size("ptr"), align(2));
|
||||
@@ -3585,44 +3585,6 @@ pub const fn as_ptr(&self) -> *mut $int_type {
|
||||
@@ -3585,42 +3585,6 @@ pub const fn as_ptr(&self) -> *mut $int_type {
|
||||
8,
|
||||
u64 AtomicU64
|
||||
}
|
||||
@@ -62,7 +53,6 @@ index bf2b6d59f88..d5ccce03bbf 100644
|
||||
- unstable(feature = "integer_atomics", issue = "99069"),
|
||||
- rustc_const_unstable(feature = "integer_atomics", issue = "99069"),
|
||||
- rustc_const_unstable(feature = "integer_atomics", issue = "99069"),
|
||||
- rustc_diagnostic_item = "AtomicI128",
|
||||
- "i128",
|
||||
- "#![feature(integer_atomics)]\n\n",
|
||||
- atomic_min, atomic_max,
|
||||
@@ -81,7 +71,6 @@ index bf2b6d59f88..d5ccce03bbf 100644
|
||||
- unstable(feature = "integer_atomics", issue = "99069"),
|
||||
- rustc_const_unstable(feature = "integer_atomics", issue = "99069"),
|
||||
- rustc_const_unstable(feature = "integer_atomics", issue = "99069"),
|
||||
- rustc_diagnostic_item = "AtomicU128",
|
||||
- "u128",
|
||||
- "#![feature(integer_atomics)]\n\n",
|
||||
- atomic_umin, atomic_umax,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[toolchain]
|
||||
channel = "nightly-2026-02-18"
|
||||
channel = "nightly-2026-03-25"
|
||||
components = ["rust-src", "rustc-dev", "llvm-tools", "rustfmt"]
|
||||
profile = "minimal"
|
||||
|
||||
@@ -63,18 +63,18 @@ index 2e16f2cf27..3ac3df99a8 100644
|
||||
# Note that RUSTFLAGS_BOOTSTRAP should always be added to the end of
|
||||
# RUSTFLAGS, since that causes RUSTFLAGS_BOOTSTRAP to override RUSTFLAGS.
|
||||
diff --git a/src/bootstrap/src/core/config/config.rs b/src/bootstrap/src/core/config/config.rs
|
||||
index a656927b1f6..44fc5546fac 100644
|
||||
index bc68bfe396..00143ef3ed 100644
|
||||
--- a/src/bootstrap/src/core/config/config.rs
|
||||
+++ b/src/bootstrap/src/core/config/config.rs
|
||||
@@ -2249,7 +2249,7 @@ pub fn parse_download_ci_llvm<'a>(
|
||||
}
|
||||
@@ -2230,7 +2230,7 @@ pub fn download_ci_rustc_commit<'a>(
|
||||
return None;
|
||||
}
|
||||
|
||||
#[cfg(not(test))]
|
||||
- if b && dwn_ctx.is_running_on_ci && CiEnv::is_rust_lang_managed_ci_job() {
|
||||
+ if false && dwn_ctx.is_running_on_ci && CiEnv::is_rust_lang_managed_ci_job() {
|
||||
// On rust-lang CI, we must always rebuild LLVM if there were any modifications to it
|
||||
panic!(
|
||||
"\`llvm.download-ci-llvm\` cannot be set to \`true\` on CI. Use \`if-unchanged\` instead."
|
||||
- if dwn_ctx.is_running_on_ci() {
|
||||
+ if false && dwn_ctx.is_running_on_ci() {
|
||||
eprintln!("CI rustc commit matches with HEAD and we are in CI.");
|
||||
eprintln!(
|
||||
"\`rustc.download-ci\` functionality will be skipped as artifacts are not available."
|
||||
diff --git a/src/build_helper/src/git.rs b/src/build_helper/src/git.rs
|
||||
index 330fb465de..a4593ed96f 100644
|
||||
--- a/src/build_helper/src/git.rs
|
||||
|
||||
@@ -20,7 +20,6 @@ for test in $(rg -i --files-with-matches "//(\[\w+\])?~[^\|]*\s*ERR|//@ error-pa
|
||||
done
|
||||
|
||||
git checkout -- tests/ui/issues/auxiliary/issue-3136-a.rs # contains //~ERROR, but shouldn't be removed
|
||||
git checkout -- tests/ui/proc-macro/pretty-print-hack/
|
||||
git checkout -- tests/ui/entry-point/auxiliary/bad_main_functions.rs
|
||||
|
||||
# missing features
|
||||
@@ -152,7 +151,6 @@ rm -r tests/run-make/short-ice # ICE backtrace begin/end marker mismatch
|
||||
rm -r tests/run-make/remap-path-prefix-dwarf # requires llvm-dwarfdump
|
||||
rm -r tests/run-make/strip # same
|
||||
rm -r tests/run-make-cargo/compiler-builtins # Expects lib/rustlib/src/rust to contains the standard library source
|
||||
rm -r tests/run-make/translation # same
|
||||
rm -r tests/run-make-cargo/panic-immediate-abort-works # same
|
||||
rm -r tests/run-make-cargo/panic-immediate-abort-codegen # same
|
||||
rm -r tests/run-make/missing-unstable-trait-bound # This disables support for unstable features, but running cg_clif needs some unstable features
|
||||
|
||||
@@ -120,9 +120,15 @@ fn codegen_global_asm_inner<'tcx>(
|
||||
}
|
||||
|
||||
let symbol = tcx.symbol_name(instance);
|
||||
let symbol_name = if tcx.sess.target.is_like_darwin {
|
||||
format!("_{}", symbol.name)
|
||||
} else {
|
||||
symbol.name.to_owned()
|
||||
};
|
||||
|
||||
// FIXME handle the case where the function was made private to the
|
||||
// current codegen unit
|
||||
global_asm.push_str(&escape_symbol_name(tcx, symbol.name, span));
|
||||
global_asm.push_str(&escape_symbol_name(tcx, &symbol_name, span));
|
||||
}
|
||||
GlobalAsmOperandRef::SymStatic { def_id } => {
|
||||
if cfg!(not(feature = "inline_asm_sym")) {
|
||||
@@ -134,7 +140,13 @@ fn codegen_global_asm_inner<'tcx>(
|
||||
|
||||
let instance = Instance::mono(tcx, def_id);
|
||||
let symbol = tcx.symbol_name(instance);
|
||||
global_asm.push_str(&escape_symbol_name(tcx, symbol.name, span));
|
||||
let symbol_name = if tcx.sess.target.is_like_darwin {
|
||||
format!("_{}", symbol.name)
|
||||
} else {
|
||||
symbol.name.to_owned()
|
||||
};
|
||||
|
||||
global_asm.push_str(&escape_symbol_name(tcx, &symbol_name, span));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
use std::fmt::Write;
|
||||
|
||||
use cranelift_codegen::isa::CallConv;
|
||||
use rustc_abi::CanonAbi;
|
||||
use rustc_ast::ast::{InlineAsmOptions, InlineAsmTemplatePiece};
|
||||
use rustc_hir::LangItem;
|
||||
use rustc_middle::ty::layout::FnAbiOf;
|
||||
use rustc_span::sym;
|
||||
use rustc_target::asm::*;
|
||||
use rustc_target::spec::Arch;
|
||||
@@ -120,21 +122,30 @@ pub(crate) fn codegen_inline_asm_terminator<'tcx>(
|
||||
.unwrap();
|
||||
let symbol = fx.tcx.symbol_name(instance);
|
||||
|
||||
// Pass a wrapper rather than the function itself as the function itself may not
|
||||
// be exported from the main codegen unit and may thus be unreachable from the
|
||||
// object file created by an external assembler.
|
||||
let wrapper_name = format!(
|
||||
"{}__inline_asm_{}_wrapper_n{}",
|
||||
fx.symbol_name,
|
||||
fx.cgu_name.as_str().replace('.', "__").replace('-', "_"),
|
||||
fx.inline_asm_index,
|
||||
);
|
||||
fx.inline_asm_index += 1;
|
||||
let sig =
|
||||
get_function_sig(fx.tcx, fx.target_config.default_call_conv, instance);
|
||||
create_wrapper_function(fx.module, sig, &wrapper_name, symbol.name);
|
||||
if FullyMonomorphizedLayoutCx(fx.tcx)
|
||||
.fn_abi_of_instance(instance, ty::List::empty())
|
||||
.conv
|
||||
== CanonAbi::Custom
|
||||
{
|
||||
// We can't create a wrapper for custom ABI functions.
|
||||
CInlineAsmOperand::Symbol { symbol: symbol.name.to_owned() }
|
||||
} else {
|
||||
// Pass a wrapper rather than the function itself as the function itself may not
|
||||
// be exported from the main codegen unit and may thus be unreachable from the
|
||||
// object file created by an external assembler.
|
||||
let wrapper_name = format!(
|
||||
"{}__inline_asm_{}_wrapper_n{}",
|
||||
fx.symbol_name,
|
||||
fx.cgu_name.as_str().replace('.', "__").replace('-', "_"),
|
||||
fx.inline_asm_index,
|
||||
);
|
||||
fx.inline_asm_index += 1;
|
||||
let sig =
|
||||
get_function_sig(fx.tcx, fx.target_config.default_call_conv, instance);
|
||||
create_wrapper_function(fx.module, sig, &wrapper_name, symbol.name);
|
||||
|
||||
CInlineAsmOperand::Symbol { symbol: wrapper_name }
|
||||
CInlineAsmOperand::Symbol { symbol: wrapper_name }
|
||||
}
|
||||
} else {
|
||||
span_bug!(span, "invalid type for asm sym (fn)");
|
||||
}
|
||||
@@ -548,22 +559,21 @@ fn generate_asm_wrapper(&self, asm_name: &str) -> String {
|
||||
match self.arch {
|
||||
InlineAsmArch::X86_64 => match reg {
|
||||
InlineAsmReg::X86(reg)
|
||||
if reg as u32 >= X86InlineAsmReg::xmm0 as u32
|
||||
&& reg as u32 <= X86InlineAsmReg::xmm15 as u32 =>
|
||||
if matches!(
|
||||
reg.reg_class(),
|
||||
X86InlineAsmRegClass::xmm_reg
|
||||
| X86InlineAsmRegClass::ymm_reg
|
||||
| X86InlineAsmRegClass::zmm_reg
|
||||
) =>
|
||||
{
|
||||
// rustc emits x0 rather than xmm0
|
||||
let class = match *modifier {
|
||||
None | Some('x') => "xmm",
|
||||
Some('y') => "ymm",
|
||||
Some('z') => "zmm",
|
||||
_ => unreachable!(),
|
||||
};
|
||||
write!(
|
||||
generated_asm,
|
||||
"{class}{}",
|
||||
reg as u32 - X86InlineAsmReg::xmm0 as u32
|
||||
)
|
||||
.unwrap();
|
||||
// rustc emits x0/y0/z0 rather than xmm0/ymm0/zmm0
|
||||
let name = reg.name();
|
||||
if let Some(prefix) = modifier {
|
||||
let index = &name[3..];
|
||||
write!(generated_asm, "{prefix}mm{index}").unwrap();
|
||||
} else {
|
||||
write!(generated_asm, "{name}").unwrap();
|
||||
}
|
||||
}
|
||||
_ => reg
|
||||
.emit(&mut generated_asm, InlineAsmArch::X86_64, *modifier)
|
||||
@@ -575,7 +585,13 @@ fn generate_asm_wrapper(&self, asm_name: &str) -> String {
|
||||
CInlineAsmOperand::Const { ref value } => {
|
||||
generated_asm.push_str(value);
|
||||
}
|
||||
CInlineAsmOperand::Symbol { ref symbol } => generated_asm.push_str(symbol),
|
||||
CInlineAsmOperand::Symbol { ref symbol } => {
|
||||
if binary_format == BinaryFormat::Macho {
|
||||
generated_asm.push('_');
|
||||
}
|
||||
|
||||
generated_asm.push_str(symbol);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -716,12 +732,17 @@ fn save_register(
|
||||
InlineAsmArch::X86_64 => {
|
||||
match reg {
|
||||
InlineAsmReg::X86(reg)
|
||||
if reg as u32 >= X86InlineAsmReg::xmm0 as u32
|
||||
&& reg as u32 <= X86InlineAsmReg::xmm15 as u32 =>
|
||||
if matches!(
|
||||
reg.reg_class(),
|
||||
X86InlineAsmRegClass::xmm_reg
|
||||
| X86InlineAsmRegClass::ymm_reg
|
||||
| X86InlineAsmRegClass::zmm_reg
|
||||
) =>
|
||||
{
|
||||
// rustc emits x0 rather than xmm0
|
||||
write!(generated_asm, " movups [rbx+0x{:x}], ", offset.bytes()).unwrap();
|
||||
write!(generated_asm, "xmm{}", reg as u32 - X86InlineAsmReg::xmm0 as u32)
|
||||
// rustc emits x0/y0/z0 rather than xmm0/ymm0/zmm0
|
||||
let name = reg.name();
|
||||
let mov = if name.starts_with("xmm") { "movups" } else { "vmovups" };
|
||||
write!(generated_asm, " {mov} [rbx+0x{:x}], {name}", offset.bytes())
|
||||
.unwrap();
|
||||
}
|
||||
_ => {
|
||||
@@ -761,16 +782,17 @@ fn restore_register(
|
||||
InlineAsmArch::X86_64 => {
|
||||
match reg {
|
||||
InlineAsmReg::X86(reg)
|
||||
if reg as u32 >= X86InlineAsmReg::xmm0 as u32
|
||||
&& reg as u32 <= X86InlineAsmReg::xmm15 as u32 =>
|
||||
if matches!(
|
||||
reg.reg_class(),
|
||||
X86InlineAsmRegClass::xmm_reg
|
||||
| X86InlineAsmRegClass::ymm_reg
|
||||
| X86InlineAsmRegClass::zmm_reg
|
||||
) =>
|
||||
{
|
||||
// rustc emits x0 rather than xmm0
|
||||
write!(
|
||||
generated_asm,
|
||||
" movups xmm{}",
|
||||
reg as u32 - X86InlineAsmReg::xmm0 as u32
|
||||
)
|
||||
.unwrap();
|
||||
// rustc emits x0/y0/z0 rather than xmm0/ymm0/zmm0
|
||||
let name = reg.name();
|
||||
let mov = if name.starts_with("xmm") { "movups" } else { "vmovups" };
|
||||
write!(generated_asm, " {mov} {name}").unwrap();
|
||||
}
|
||||
_ => {
|
||||
generated_asm.push_str(" mov ");
|
||||
|
||||
Reference in New Issue
Block a user