porffor 0.37.12 → 0.37.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/compiler/2c.js
CHANGED
@@ -208,12 +208,11 @@ export default ({ funcs, globals, tags, data, exceptions, pages }) => {
|
|
208
208
|
for (const x in globals) {
|
209
209
|
const g = globals[x];
|
210
210
|
|
211
|
-
out += `${CValtype[g.type]} ${sanitize(x)} = ${g.init ?? 0}`;
|
212
|
-
out += ';\n';
|
211
|
+
out += `${CValtype[g.type]} ${sanitize(x)} = ${g.init ?? 0};\n`;
|
213
212
|
}
|
214
213
|
|
215
214
|
if (pages.size > 0) {
|
216
|
-
prepend.set('_memory', `char _memory[${pages.size * pageSize}];\n`);
|
215
|
+
prepend.set('_memory', `static char _memory[${pages.size * pageSize}];\n`);
|
217
216
|
if (Prefs['2cMemcpy']) includes.set('string.h', true);
|
218
217
|
}
|
219
218
|
|
@@ -222,9 +221,8 @@ export default ({ funcs, globals, tags, data, exceptions, pages }) => {
|
|
222
221
|
const dataOffset = x => pages.get(x.page).ind * pageSize;
|
223
222
|
if (Prefs['2cMemcpy']) {
|
224
223
|
prependMain.set('_data', activeData.map(x => `memcpy(_memory + ${dataOffset(x)}, (unsigned char[]){${x.bytes.join(',')}}, ${x.bytes.length});`).join('\n '));
|
225
|
-
includes.set('string.h', true);
|
226
224
|
} else {
|
227
|
-
prependMain.set('_data', activeData.map(x => x.bytes.reduce((acc, y, i) => acc + `_memory[${dataOffset(x) + i}]=(u8)${y}
|
225
|
+
prependMain.set('_data', activeData.map(x => x.bytes.reduce((acc, y, i) => acc + (y === 0 ? '' : `_memory[${dataOffset(x) + i}]=(u8)${y};`), '')).join('\n '));
|
228
226
|
}
|
229
227
|
}
|
230
228
|
|
@@ -17,9 +17,56 @@ export const __Porffor_strcmp = (a: any, b: any): boolean => {
|
|
17
17
|
// bytestring, bytestring
|
18
18
|
// this path is hyper-optimized as it is by far the most common and (perf) important
|
19
19
|
|
20
|
-
let ap: i32 = a -
|
21
|
-
let bp: i32 = b -
|
20
|
+
let ap: i32 = a - 28;
|
21
|
+
let bp: i32 = b - 28;
|
22
22
|
Porffor.wasm`
|
23
|
+
;; load in 2 i64x2 chunks while length >= 32
|
24
|
+
local.get ${al}
|
25
|
+
i32.const 32
|
26
|
+
i32.ge_s
|
27
|
+
if 64
|
28
|
+
loop 64
|
29
|
+
local.get ${ap}
|
30
|
+
local.get ${al}
|
31
|
+
i32.add
|
32
|
+
v128.load 0 0
|
33
|
+
|
34
|
+
local.get ${bp}
|
35
|
+
local.get ${al}
|
36
|
+
i32.add
|
37
|
+
v128.load 0 0
|
38
|
+
|
39
|
+
v128.xor
|
40
|
+
|
41
|
+
local.get ${ap}
|
42
|
+
local.get ${al}
|
43
|
+
i32.add
|
44
|
+
v128.load 0 16
|
45
|
+
|
46
|
+
local.get ${bp}
|
47
|
+
local.get ${al}
|
48
|
+
i32.add
|
49
|
+
v128.load 0 16
|
50
|
+
|
51
|
+
v128.xor
|
52
|
+
v128.or
|
53
|
+
v128.any_true
|
54
|
+
if 64
|
55
|
+
i32.const 0
|
56
|
+
i32.const 2
|
57
|
+
return
|
58
|
+
end
|
59
|
+
|
60
|
+
local.get ${al}
|
61
|
+
i32.const 32
|
62
|
+
i32.sub
|
63
|
+
local.tee ${al}
|
64
|
+
i32.const 32
|
65
|
+
i32.ge_s
|
66
|
+
br_if 0
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
23
70
|
;; load in i64 chunks while length >= 8
|
24
71
|
local.get ${al}
|
25
72
|
i32.const 8
|
@@ -29,12 +76,12 @@ if 64
|
|
29
76
|
local.get ${ap}
|
30
77
|
local.get ${al}
|
31
78
|
i32.add
|
32
|
-
i64.load 0
|
79
|
+
i64.load 0 24
|
33
80
|
|
34
81
|
local.get ${bp}
|
35
82
|
local.get ${al}
|
36
83
|
i32.add
|
37
|
-
i64.load 0
|
84
|
+
i64.load 0 24
|
38
85
|
|
39
86
|
i64.ne
|
40
87
|
if 64
|
@@ -59,15 +106,15 @@ i32.const 2
|
|
59
106
|
i32.ge_s
|
60
107
|
if 64
|
61
108
|
loop 64
|
62
|
-
local.get ${
|
109
|
+
local.get ${a}
|
63
110
|
local.get ${al}
|
64
111
|
i32.add
|
65
|
-
i32.load16_u 0
|
112
|
+
i32.load16_u 0 2
|
66
113
|
|
67
|
-
local.get ${
|
114
|
+
local.get ${b}
|
68
115
|
local.get ${al}
|
69
116
|
i32.add
|
70
|
-
i32.load16_u 0
|
117
|
+
i32.load16_u 0 2
|
71
118
|
|
72
119
|
i32.ne
|
73
120
|
if 64
|
@@ -17,7 +17,7 @@ usedTypes:[80,7,195],
|
|
17
17
|
globalInits:{underlyingKeys:(_,{allocPage,glbl,loc})=>[...number(allocPage(_,'array: __internal_object.ts/underlyingKeys','f64'),124),...glbl(36,'underlyingKeys',124),...glbl(35,'underlyingKeys',124),[252,3],[33,loc('#makearray_pointer_tmp',127)],[32,loc('#makearray_pointer_tmp',127)],[65,0],[54,1,0],[32,loc('#makearray_pointer_tmp',127)],[68,0],[252,3],[54,1,0],[32,loc('#makearray_pointer_tmp',127)],[26]],underlyingVals:(_,{allocPage,glbl,loc})=>[...number(allocPage(_,'array: __internal_object.ts/underlyingVals','f64'),124),...glbl(36,'underlyingVals',124),...glbl(35,'underlyingVals',124),[252,3],[33,loc('#makearray_pointer_tmp',127)],[32,loc('#makearray_pointer_tmp',127)],[65,0],[54,1,0],[32,loc('#makearray_pointer_tmp',127)],[68,0],[252,3],[54,1,0],[32,loc('#makearray_pointer_tmp',127)],[26]]},data:{"bytestring: __Porffor_object_makeObject/key1":[9,0,0,0,112,114,111,116,111,116,121,112,101],"bytestring: __Porffor_object_makeObject/key2":[11,0,0,0,99,111,110,115,116,114,117,99,116,111,114]},
|
18
18
|
};
|
19
19
|
this.__Porffor_strcmp = {
|
20
|
-
wasm:()=>[[32,0],[32,2],[70],[4,64],[65,1],[65,2],[15],[11],[32,0],[40,0,0],[33,4],[32,2],[40,0,0],[33,5],[32,4],[32,5],[71],[4,64],[65,0],[65,2],[15],[11],[32,1],[65,195,1],[70],[4,64],[32,3],[65,195,1],[70],[4,64],[32,0],[65,
|
20
|
+
wasm:()=>[[32,0],[32,2],[70],[4,64],[65,1],[65,2],[15],[11],[32,0],[40,0,0],[33,4],[32,2],[40,0,0],[33,5],[32,4],[32,5],[71],[4,64],[65,0],[65,2],[15],[11],[32,1],[65,195,1],[70],[4,64],[32,3],[65,195,1],[70],[4,64],[32,0],[65,28],[107],[33,6],[32,2],[65,28],[107],[33,7],[32,4],[65,32],[78],[4,64],[3,64],[32,6],[32,4],[106],[253,0,0,0],[32,7],[32,4],[106],[253,0,0,0],[253,81],[32,6],[32,4],[106],[253,0,0,16],[32,7],[32,4],[106],[253,0,0,16],[253,81],[253,80],[253,83],[4,64],[65,0],[65,2],[15],[11],[32,4],[65,32],[107],[34,4],[65,32],[78],[13,0],[11],[11],[32,4],[65,8],[78],[4,64],[3,64],[32,6],[32,4],[106],[41,0,24],[32,7],[32,4],[106],[41,0,24],[82],[4,64],[65,0],[65,2],[15],[11],[32,4],[65,8],[107],[34,4],[65,8],[78],[13,0],[11],[11],[32,4],[65,2],[78],[4,64],[3,64],[32,0],[32,4],[106],[47,0,2],[32,2],[32,4],[106],[47,0,2],[71],[4,64],[65,0],[65,2],[15],[11],[32,4],[65,2],[107],[34,4],[65,2],[78],[13,0],[11],[11],[32,4],[65,1],[70],[4,64],[32,0],[45,0,4],[32,2],[45,0,4],[71],[4,64],[65,0],[65,2],[15],[11],[11],[65,1],[65,2],[15],[5],[65,0],[33,8],[3,64],[32,8],[32,4],[72],[4,64],[32,0],[32,8],[106],[45,0,4],[32,2],[32,8],[65,2],[108],[106],[47,0,4],[71],[4,64],[65,0],[65,2],[15],[11],[32,8],[65,1],[106],[33,8],[12,1],[11],[11],[65,1],[65,2],[15],[11],[5],[32,3],[65,195,1],[70],[4,64],[65,0],[33,8],[3,64],[32,8],[32,4],[72],[4,64],[32,0],[32,8],[65,2],[108],[106],[47,0,4],[32,2],[32,8],[106],[45,0,4],[71],[4,64],[65,0],[65,2],[15],[11],[32,8],[65,1],[106],[33,8],[12,1],[11],[11],[65,1],[65,2],[15],[5],[32,0],[65,4],[107],[33,6],[32,2],[65,4],[107],[33,7],[3,64],[32,6],[32,4],[65,2],[108],[106],[41,0,0],[32,7],[32,4],[65,2],[108],[106],[41,0,0],[82],[4,64],[65,0],[65,2],[15],[11],[32,4],[65,4],[107],[34,4],[65,4],[78],[13,0],[11],[65,0],[33,8],[3,64],[32,8],[32,4],[72],[4,64],[32,0],[32,8],[65,2],[108],[106],[47,0,4],[32,2],[32,8],[65,2],[108],[106],[47,0,4],[71],[4,64],[65,0],[65,2],[15],[11],[32,8],[65,1],[106],[33,8],[12,1],[11],[11],[65,1],[65,2],[15],[11],[11],[65,0],[65,128,1],[15]],
|
21
21
|
params:[127,127,127,127],typedParams:1,returns:[127,127],typedReturns:1,
|
22
22
|
locals:[127,127,127,127,127],localNames:["a","a#type","b","b#type","al","bl","ap","bp","i"],
|
23
23
|
};
|
package/compiler/index.js
CHANGED
@@ -256,7 +256,7 @@ export default (code, flags) => {
|
|
256
256
|
if (logProgress) {
|
257
257
|
const total = performance.now();
|
258
258
|
progressClear();
|
259
|
-
console.log(`\u001b[90m[${total.toFixed(0)}ms]\u001b[0m \u001b[
|
259
|
+
console.log(`\u001b[90m[${total.toFixed(0)}ms]\u001b[0m \u001b[32mcompiled ${globalThis.file} \u001b[90m->\u001b[0m \u001b[92m${outFile}\u001b[90m (${(fs.statSync(outFile).size / 1000).toFixed(1)}KB)\u001b[0m`);
|
260
260
|
}
|
261
261
|
|
262
262
|
process.exit();
|
package/compiler/wasmSpec.js
CHANGED
@@ -217,6 +217,10 @@ export const Opcodes = {
|
|
217
217
|
i32x4_add: [ 0xfd, 0xae, 0x01 ],
|
218
218
|
i32x4_sub: [ 0xfd, 0xb1, 0x01 ],
|
219
219
|
i32x4_mul: [ 0xfd, 0xb5, 0x01 ],
|
220
|
+
|
221
|
+
v128_or: [ 0xfd, 80 ],
|
222
|
+
v128_xor: [ 0xfd, 81 ],
|
223
|
+
v128_any_true: [ 0xfd, 83 ]
|
220
224
|
};
|
221
225
|
|
222
226
|
export const FuncType = 0x60;
|
package/package.json
CHANGED