You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2026/06/03 22:34:44 UTC
(couchdb) branch main updated (aa9595350 -> 1ef26320b)
This is an automated email from the ASF dual-hosted git repository.
nickva pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb.git
from aa9595350 QuickJS Update: 10-40% speedup, compilation fixes, test speed-ups
new bffd5274b QuickJS Update: fix gcc perf regression, faster test262 runs
new 1ef26320b CI: Disable MacOS runner for a bit
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
build-aux/Jenkinsfile | 20 +++++++++++---------
.../patches/01-spidermonkey-185-mode.patch | 6 +++---
src/couch_quickjs/patches/02-test262-errors.patch | 4 ++--
src/couch_quickjs/quickjs/quickjs.c | 15 +++++++++++++++
src/couch_quickjs/quickjs/quickjs.h | 10 ++++++----
src/couch_quickjs/quickjs/test262.conf | 10 ++++++++++
6 files changed, 47 insertions(+), 18 deletions(-)
(couchdb) 02/02: CI: Disable MacOS runner for a bit
Posted by va...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nickva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 1ef26320b753e62971d287975e6e7b3653efaca2
Author: Nick Vatamaniuc <va...@gmail.com>
AuthorDate: Wed Jun 3 17:44:25 2026 -0400
CI: Disable MacOS runner for a bit
It's running out of space and Jenkins keep auto-pausing it which blocks CI jobs
indefinitely it seems (likely they'd time out after 2h).
---
build-aux/Jenkinsfile | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/build-aux/Jenkinsfile b/build-aux/Jenkinsfile
index c3b90488f..8b2c32468 100644
--- a/build-aux/Jenkinsfile
+++ b/build-aux/Jenkinsfile
@@ -261,15 +261,17 @@ meta = [
// gnu_make_eunit_opts: "${DEFAULT_GNU_MAKE_EUNIT_OPTS}"
// ],
- 'macos': [
- name: 'macOS',
- disable_spidermonkey: true,
- with_nouveau: true,
- with_clouseau: true,
- clouseau_java_home: '/opt/homebrew/opt/openjdk@21',
- gnu_make: 'gmake',
- gnu_make_eunit_opts: "${DEFAULT_GNU_MAKE_EUNIT_OPTS}"
- ],
+ // Disable temporarily as it is running out of space and Jenkins
+ // keeps auto-disabling it which blocks CI jobs
+ // 'macos': [
+ // name: 'macOS',
+ // disable_spidermonkey: true,
+ // with_nouveau: true,
+ // with_clouseau: true,
+ // clouseau_java_home: '/opt/homebrew/opt/openjdk@21',
+ // gnu_make: 'gmake',
+ // gnu_make_eunit_opts: "${DEFAULT_GNU_MAKE_EUNIT_OPTS}"
+ // ],
'win2022': [
name: 'Windows 2022',
(couchdb) 01/02: QuickJS Update: fix gcc perf regression, faster test262 runs
Posted by va...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nickva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit bffd5274b1691e345c29adc04df347ac7c67d5d1
Author: Nick Vatamaniuc <va...@gmail.com>
AuthorDate: Wed Jun 3 14:27:13 2026 -0400
QuickJS Update: fix gcc perf regression, faster test262 runs
* Add optional define to add asm labels for each opcode to ease code inspection
and profiling
https://github.com/bellard/quickjs/commit/e2c01dff615c0df4d65ed545e4a80ad40b94ea28
* Fixed large performance regression with recent GCC versions
https://github.com/bellard/quickjs/commit/10c81b1989de2d2e8d482d252b160a34f215d3e2
* Exclude few very slow and currently useless test262 tests
https://github.com/bellard/quickjs/commit/594f965146308f4bc8260bd7d91c0eb92b8990d1
---
src/couch_quickjs/patches/01-spidermonkey-185-mode.patch | 6 +++---
src/couch_quickjs/patches/02-test262-errors.patch | 4 ++--
src/couch_quickjs/quickjs/quickjs.c | 15 +++++++++++++++
src/couch_quickjs/quickjs/quickjs.h | 10 ++++++----
src/couch_quickjs/quickjs/test262.conf | 10 ++++++++++
5 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/src/couch_quickjs/patches/01-spidermonkey-185-mode.patch b/src/couch_quickjs/patches/01-spidermonkey-185-mode.patch
index a1aebbc08..5466852aa 100644
--- a/src/couch_quickjs/patches/01-spidermonkey-185-mode.patch
+++ b/src/couch_quickjs/patches/01-spidermonkey-185-mode.patch
@@ -1,6 +1,6 @@
---- quickjs-master/quickjs.c 2026-06-02 12:12:02
-+++ quickjs/quickjs.c 2026-06-02 12:36:47
-@@ -31858,10 +31858,24 @@
+--- quickjs-master/quickjs.c 2026-06-03 10:18:26
++++ quickjs/quickjs.c 2026-06-03 14:25:58
+@@ -31873,10 +31873,24 @@
if (s->token.val == TOK_FUNCTION ||
(token_is_pseudo_keyword(s, JS_ATOM_async) &&
peek_token(s, TRUE) == TOK_FUNCTION)) {
diff --git a/src/couch_quickjs/patches/02-test262-errors.patch b/src/couch_quickjs/patches/02-test262-errors.patch
index 72aee327d..f1ee61e58 100644
--- a/src/couch_quickjs/patches/02-test262-errors.patch
+++ b/src/couch_quickjs/patches/02-test262-errors.patch
@@ -1,5 +1,5 @@
---- quickjs-master/test262_errors.txt 2026-06-02 12:12:02
-+++ quickjs/test262_errors.txt 2026-06-02 12:36:47
+--- quickjs-master/test262_errors.txt 2026-06-03 10:18:26
++++ quickjs/test262_errors.txt 2026-06-03 14:25:58
@@ -23,6 +23,8 @@
test262/test/language/module-code/ambiguous-export-bindings/namespace-unambiguous-if-export-star-as-from-and-import-star-as-and-export.js:74: SyntaxError: export 'foo' in module 'test262/test/language/module-code/ambiguous-export-bindings/namespace-unambiguous-if-import-star-as-and-export.js' is ambiguous
test262/test/language/module-code/ambiguous-export-bindings/namespace-unambiguous-if-export-star-as-from.js:75: SyntaxError: export 'foo' in module 'test262/test/language/module-code/ambiguous-export-bindings/namespace-unambiguous-if-export-star-as-from.js' is ambiguous
diff --git a/src/couch_quickjs/quickjs/quickjs.c b/src/couch_quickjs/quickjs/quickjs.c
index d831d47e4..05d4fd031 100644
--- a/src/couch_quickjs/quickjs/quickjs.c
+++ b/src/couch_quickjs/quickjs/quickjs.c
@@ -107,6 +107,8 @@
//#define DUMP_PROMISE
//#define DUMP_READ_OBJECT
//#define DUMP_ROPE_REBALANCE
+/* add asm labels to each opcode so that it is easier to see the generated code */
+//#define OPCODE_ASM_LABEL
/* test the GC by forcing it before each object allocation */
//#define FORCE_GC_AT_MALLOC
@@ -17761,6 +17763,11 @@ typedef enum {
#define FUNC_RET_YIELD_STAR 2
#define FUNC_RET_INITIAL_YIELD 3
+#ifdef OPCODE_ASM_LABEL
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-label"
+#endif
+
/* argv[] is modified if (flags & JS_CALL_FLAG_COPY_ARGV) = 0. */
static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
JSValueConst this_obj, JSValueConst new_target,
@@ -17794,7 +17801,11 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
[ OP_COUNT ... 255 ] = &&case_default
};
#define SWITCH(pc) goto *dispatch_table[opcode = *pc++];
+#ifdef OPCODE_ASM_LABEL
+#define CASE(op) case_ ## op: asm volatile("label_" #op ":\n.globl label_" #op); dummy_case_ ## op
+#else
#define CASE(op) case_ ## op
+#endif
#define DEFAULT case_default
#define BREAK SWITCH(pc)
#endif
@@ -20535,6 +20546,10 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
return ret_val;
}
+#ifdef OPCODE_ASM_LABEL
+#pragma GCC diagnostic pop
+#endif
+
JSValue JS_Call(JSContext *ctx, JSValueConst func_obj, JSValueConst this_obj,
int argc, JSValueConst *argv)
{
diff --git a/src/couch_quickjs/quickjs/quickjs.h b/src/couch_quickjs/quickjs/quickjs.h
index 57574e6b8..476d73513 100644
--- a/src/couch_quickjs/quickjs/quickjs.h
+++ b/src/couch_quickjs/quickjs/quickjs.h
@@ -216,7 +216,7 @@ static inline JSValue __JS_NewShortBigInt(JSContext *ctx, int32_t d)
#else /* !JS_NAN_BOXING */
typedef union JSValueUnion {
- int32_t int32;
+ uint64_t uint64;
double float64;
void *ptr;
#if JS_SHORT_BIG_INT_BITS == 32
@@ -236,13 +236,15 @@ typedef struct JSValue {
#define JS_VALUE_GET_TAG(v) ((int32_t)(v).tag)
/* same as JS_VALUE_GET_TAG, but return JS_TAG_FLOAT64 with NaN boxing */
#define JS_VALUE_GET_NORM_TAG(v) JS_VALUE_GET_TAG(v)
-#define JS_VALUE_GET_INT(v) ((v).u.int32)
-#define JS_VALUE_GET_BOOL(v) ((v).u.int32)
+#define JS_VALUE_GET_INT(v) ((int)(v).u.uint64)
+#define JS_VALUE_GET_BOOL(v) ((int)(v).u.uint64)
#define JS_VALUE_GET_FLOAT64(v) ((v).u.float64)
#define JS_VALUE_GET_SHORT_BIG_INT(v) ((v).u.short_big_int)
#define JS_VALUE_GET_PTR(v) ((v).u.ptr)
-#define JS_MKVAL(tag, val) (JSValue){ (JSValueUnion){ .int32 = val }, tag }
+/* avoid uninitialized data by using a 64 bit field even if only 32
+ bits are needed because some compilers generate slower code */
+#define JS_MKVAL(tag, val) (JSValue){ (JSValueUnion){ .uint64 = (uint32_t)(val) }, tag }
#define JS_MKPTR(tag, p) (JSValue){ (JSValueUnion){ .ptr = p }, tag }
#define JS_TAG_IS_FLOAT64(tag) ((unsigned)(tag) == JS_TAG_FLOAT64)
diff --git a/src/couch_quickjs/quickjs/test262.conf b/src/couch_quickjs/quickjs/test262.conf
index 8fe86cc6f..af5cd6474 100644
--- a/src/couch_quickjs/quickjs/test262.conf
+++ b/src/couch_quickjs/quickjs/test262.conf
@@ -300,5 +300,15 @@ test262/test/staging/sm/syntax/syntax-parsed-arrow-then-directive.js
# returning "bound fn" as initialName for a function is permitted by the spec
test262/test/staging/sm/Function/function-toString-builtin.js
+# very slow tests which only test DST offset caching (QuickJS does not optimize it)
+test262/test/staging/sm/Date/dst-offset-caching-1-of-8.js
+test262/test/staging/sm/Date/dst-offset-caching-2-of-8.js
+test262/test/staging/sm/Date/dst-offset-caching-3-of-8.js
+test262/test/staging/sm/Date/dst-offset-caching-4-of-8.js
+test262/test/staging/sm/Date/dst-offset-caching-5-of-8.js
+test262/test/staging/sm/Date/dst-offset-caching-6-of-8.js
+test262/test/staging/sm/Date/dst-offset-caching-7-of-8.js
+test262/test/staging/sm/Date/dst-offset-caching-8-of-8.js
+
[tests]
# list test files or use config.testdir