Skip to content

Commit 0c91651

Browse files
authored
Merge branch 'main' into webloop-asyncgen-management
2 parents b2ac385 + 631911e commit 0c91651

25 files changed

Lines changed: 656 additions & 15 deletions

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defaults: &defaults
66
# Note: when updating the docker image version,
77
# make sure there are no extra old versions lying around.
88
# (e.g. `rg -F --hidden <old_tag>`)
9-
- image: pyodide/pyodide-env:20250728-chrome140-firefox140-py313
9+
- image: pyodide/pyodide-env:20250915-chrome140-firefox140-py313
1010
environment:
1111
EMSDK_NUM_CORES: 3
1212
EMCC_CORES: 3

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "Docker",
33
// keep in sync with "run_docker"
4-
"image": "pyodide/pyodide-env:20250728-chrome140-firefox140-py313",
4+
"image": "pyodide/pyodide-env:20250915-chrome140-firefox140-py313",
55
"remoteUser": "root",
66
"initializeCommand": "git submodule update --init",
77
"onCreateCommand": ".devcontainer/onCreate-docker.sh"

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ RUN if [ $CHROME_VERSION = "latest" ]; then SE_CHROME_VERSION="stable"; \
3434
&& mv $(dirname ${SE_CHROME_DRIVER_PATH}) /opt/chromedriver
3535

3636

37-
FROM node:20.11-bookworm-slim AS node-image
37+
FROM node:24.7-bookworm-slim AS node-image
3838
FROM python:3.13.2-slim-bookworm
3939

4040
RUN apt-get update \

docs/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -360,9 +360,9 @@ def typehints_formatter(annotation, config):
360360
if full_name == "ast.Module":
361361
return "`Module <https://docs.python.org/3/library/ast.html#module-ast>`_"
362362
# TODO: perhaps a more consistent way to handle JS xrefs / type annotations?
363-
if full_name == "pyodide.http.pyfetch.AbortController":
363+
if full_name == "pyodide.http._pyfetch.AbortController":
364364
return ":js:class:`AbortController`"
365-
if full_name == "pyodide.http.pyfetch.AbortSignal":
365+
if full_name == "pyodide.http._pyfetch.AbortSignal":
366366
return ":js:class:`AbortSignal`"
367367
return None
368368

docs/expected_js_docs.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ js:function
8484
pyodide.registerJsModule
8585
pyodide.runPython
8686
pyodide.runPythonAsync
87-
pyodide.scheduleCallback
8887
pyodide.setDebug
8988
pyodide.setInterruptBuffer
9089
pyodide.setStderr

docs/project/changelog.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@ myst:
1717

1818
## Unreleased
1919

20+
- {{ Fix }} In 0.28.2 we accidentally disabled a performance optimization that
21+
makes the foreign function interface about 5% slower. {pr}`5890`
22+
23+
- {{ Enhancement }} Added ``get_debug``/``set_debug`` methods to webloop. These
24+
are methods on ``AbstractEventLoop``. There are currently no differences in
25+
behavior when debug mode is set on the event loop. {pr}`5886`
26+
27+
- {{ Enhancement }} The typescript types for `pyodide.FS` are now slightly more
28+
complete. {pr}`5863`
29+
2030
## Version 0.28.2
2131

2232
_August 19, 2025_

packages/test-simd/meta.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package:
2+
name: test-simd
3+
version: "0.1.0"
4+
tag:
5+
- core
6+
- pyodide.test
7+
top-level:
8+
- test_simd
9+
source:
10+
path: src

packages/test-simd/src/setup.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from setuptools import Extension, setup
2+
3+
module = Extension(
4+
"test_simd.simd_wrapper",
5+
sources=[
6+
"test_simd/simd_wrapper.c",
7+
"test_simd/simd_wasm.c",
8+
"test_simd/simd_sse.c",
9+
"test_simd/simd_sse2.c",
10+
"test_simd/simd_avx.c",
11+
],
12+
extra_compile_args=["-msimd128", "-msse2", "-mavx"],
13+
)
14+
setup(name="test-simd", version="0.1.0", ext_modules=[module], packages=["test_simd"])
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""SIMD test package.
2+
3+
Provides access to the CPython C-extension module `simd_wrapper`.
4+
"""
5+
6+
from . import simd_wrapper
7+
8+
wasm_add4_sum = simd_wrapper.wasm_add4_sum
9+
wasm_dot4 = simd_wrapper.wasm_dot4
10+
sse_add4_sum = simd_wrapper.sse_add4_sum
11+
sse_dot4 = simd_wrapper.sse_dot4
12+
sse2_add2_sum = simd_wrapper.sse2_add2_sum
13+
sse2_dot2 = simd_wrapper.sse2_dot2
14+
avx_add8_sum = simd_wrapper.avx_add8_sum
15+
avx_dot8 = simd_wrapper.avx_dot8
16+
17+
__all__ = [
18+
"simd_wrapper",
19+
"wasm_add4_sum",
20+
"wasm_dot4",
21+
"sse_add4_sum",
22+
"sse_dot4",
23+
"sse2_add2_sum",
24+
"sse2_dot2",
25+
"avx_add8_sum",
26+
"avx_dot8",
27+
]
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// AVX path (f32x8, 8 lanes)
2+
// WebAssembly SIMD only supports 128-bit vectors.
3+
// When compiling AVX intrinsics, Emscripten lowers each 256-bit op into two
4+
// 128-bit ops. Here we duplicate the lower 128b so result = 2 × SSE (shows
5+
// upper half is active).
6+
#include <immintrin.h>
7+
8+
#if !defined(__wasm_simd128__) || !defined(__AVX__)
9+
#error "Requires -msimd128 and -mavx"
10+
#endif
11+
12+
float
13+
simd_avx_add8_sum(float a0,
14+
float a1,
15+
float a2,
16+
float a3,
17+
float b0,
18+
float b1,
19+
float b2,
20+
float b3)
21+
{
22+
__m256 va = _mm256_set_ps(a3, a2, a1, a0, a3, a2, a1, a0);
23+
__m256 vb = _mm256_set_ps(b3, b2, b1, b0, b3, b2, b1, b0);
24+
__m256 vc = _mm256_add_ps(va, vb);
25+
float out[8];
26+
_mm256_storeu_ps(out, vc);
27+
// Collapse 8-lane vector to scalar for JS/Python assertions
28+
float s = 0.0f;
29+
for (int i = 0; i < 8; i++) {
30+
s += out[i];
31+
}
32+
return s;
33+
}
34+
35+
float
36+
simd_avx_dot8(float a0,
37+
float a1,
38+
float a2,
39+
float a3,
40+
float b0,
41+
float b1,
42+
float b2,
43+
float b3)
44+
{
45+
__m256 va = _mm256_set_ps(a3, a2, a1, a0, a3, a2, a1, a0);
46+
__m256 vb = _mm256_set_ps(b3, b2, b1, b0, b3, b2, b1, b0);
47+
__m256 vm = _mm256_mul_ps(va, vb);
48+
float out[8];
49+
_mm256_storeu_ps(out, vm);
50+
// Collapse 8-lane vector to scalar for JS/Python assertions
51+
float s = 0.0f;
52+
for (int i = 0; i < 8; i++) {
53+
s += out[i];
54+
}
55+
return s;
56+
}

0 commit comments

Comments
 (0)