This commit is contained in:
2025-12-28 19:50:27 -06:00
parent 5f471ee003
commit c432bc211f
4 changed files with 493 additions and 32 deletions

View File

@@ -14357,6 +14357,15 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
v2 &= 0x1f;
sp[-2] = JS_NewInt32(ctx, v1 << v2);
sp--;
} else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2) ||
(JS_VALUE_GET_TAG(op1) == JS_TAG_INT && JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) ||
(JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1)) && JS_VALUE_GET_TAG(op2) == JS_TAG_INT)) {
uint32_t v1, v2;
v1 = JS_VALUE_GET_TAG(op1) == JS_TAG_INT ? JS_VALUE_GET_INT(op1) : (int32_t)JS_VALUE_GET_FLOAT64(op1);
v2 = JS_VALUE_GET_TAG(op2) == JS_TAG_INT ? JS_VALUE_GET_INT(op2) : (int32_t)JS_VALUE_GET_FLOAT64(op2);
v2 &= 0x1f;
sp[-2] = JS_NewInt32(ctx, v1 << v2);
sp--;
} else {
sp[-2] = JS_NULL;
sp--;
@@ -14376,6 +14385,15 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
(uint32_t)JS_VALUE_GET_INT(op1) >>
v2);
sp--;
} else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2) ||
(JS_VALUE_GET_TAG(op1) == JS_TAG_INT && JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) ||
(JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1)) && JS_VALUE_GET_TAG(op2) == JS_TAG_INT)) {
uint32_t v1, v2;
v1 = JS_VALUE_GET_TAG(op1) == JS_TAG_INT ? JS_VALUE_GET_INT(op1) : (int32_t)JS_VALUE_GET_FLOAT64(op1);
v2 = JS_VALUE_GET_TAG(op2) == JS_TAG_INT ? JS_VALUE_GET_INT(op2) : (int32_t)JS_VALUE_GET_FLOAT64(op2);
v2 &= 0x1f;
sp[-2] = JS_NewUint32(ctx, v1 >> v2);
sp--;
} else {
sp[-2] = JS_NULL;
sp--;
@@ -14394,6 +14412,16 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
sp[-2] = JS_NewInt32(ctx,
(int)JS_VALUE_GET_INT(op1) >> v2);
sp--;
} else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2) ||
(JS_VALUE_GET_TAG(op1) == JS_TAG_INT && JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) ||
(JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1)) && JS_VALUE_GET_TAG(op2) == JS_TAG_INT)) {
int32_t v1;
uint32_t v2;
v1 = JS_VALUE_GET_TAG(op1) == JS_TAG_INT ? JS_VALUE_GET_INT(op1) : (int32_t)JS_VALUE_GET_FLOAT64(op1);
v2 = JS_VALUE_GET_TAG(op2) == JS_TAG_INT ? JS_VALUE_GET_INT(op2) : (int32_t)JS_VALUE_GET_FLOAT64(op2);
v2 &= 0x1f;
sp[-2] = JS_NewInt32(ctx, v1 >> v2);
sp--;
} else {
sp[-2] = JS_NULL;
sp--;
@@ -14410,6 +14438,14 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
JS_VALUE_GET_INT(op1) &
JS_VALUE_GET_INT(op2));
sp--;
} else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2) ||
(JS_VALUE_GET_TAG(op1) == JS_TAG_INT && JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) ||
(JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1)) && JS_VALUE_GET_TAG(op2) == JS_TAG_INT)) {
int32_t v1, v2;
v1 = JS_VALUE_GET_TAG(op1) == JS_TAG_INT ? JS_VALUE_GET_INT(op1) : (int32_t)JS_VALUE_GET_FLOAT64(op1);
v2 = JS_VALUE_GET_TAG(op2) == JS_TAG_INT ? JS_VALUE_GET_INT(op2) : (int32_t)JS_VALUE_GET_FLOAT64(op2);
sp[-2] = JS_NewInt32(ctx, v1 & v2);
sp--;
} else {
sp[-2] = JS_NULL;
sp--;
@@ -14426,6 +14462,14 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
JS_VALUE_GET_INT(op1) |
JS_VALUE_GET_INT(op2));
sp--;
} else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2) ||
(JS_VALUE_GET_TAG(op1) == JS_TAG_INT && JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) ||
(JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1)) && JS_VALUE_GET_TAG(op2) == JS_TAG_INT)) {
int32_t v1, v2;
v1 = JS_VALUE_GET_TAG(op1) == JS_TAG_INT ? JS_VALUE_GET_INT(op1) : (int32_t)JS_VALUE_GET_FLOAT64(op1);
v2 = JS_VALUE_GET_TAG(op2) == JS_TAG_INT ? JS_VALUE_GET_INT(op2) : (int32_t)JS_VALUE_GET_FLOAT64(op2);
sp[-2] = JS_NewInt32(ctx, v1 | v2);
sp--;
} else {
sp[-2] = JS_NULL;
sp--;
@@ -14442,6 +14486,14 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
JS_VALUE_GET_INT(op1) ^
JS_VALUE_GET_INT(op2));
sp--;
} else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2) ||
(JS_VALUE_GET_TAG(op1) == JS_TAG_INT && JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) ||
(JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1)) && JS_VALUE_GET_TAG(op2) == JS_TAG_INT)) {
int32_t v1, v2;
v1 = JS_VALUE_GET_TAG(op1) == JS_TAG_INT ? JS_VALUE_GET_INT(op1) : (int32_t)JS_VALUE_GET_FLOAT64(op1);
v2 = JS_VALUE_GET_TAG(op2) == JS_TAG_INT ? JS_VALUE_GET_INT(op2) : (int32_t)JS_VALUE_GET_FLOAT64(op2);
sp[-2] = JS_NewInt32(ctx, v1 ^ v2);
sp--;
} else {
sp[-2] = JS_NULL;
sp--;