Skip to content

Commit b622400

Browse files
authored
Simplify memmove condition for when to use memcpy (#1418)
1 parent 348c42b commit b622400

26 files changed

+201
-276
lines changed

std/assembly/util/memory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ export function memcpy(dest: usize, src: usize, n: usize): void { // see: musl/s
146146
export function memmove(dest: usize, src: usize, n: usize): void { // see: musl/src/string/memmove.c
147147
if (dest === src) return;
148148
if (ASC_SHRINK_LEVEL < 1) {
149-
if (src + n <= dest || dest + n <= src) {
149+
if (src - dest - n <= -(n << 1)) {
150150
memcpy(dest, src, n);
151151
return;
152152
}

tests/compiler/extends-baseaggregate.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2658,19 +2658,16 @@
26582658
i32.lt_s
26592659
drop
26602660
local.get $4
2661-
local.get $3
2662-
i32.add
26632661
local.get $5
2662+
i32.sub
2663+
local.get $3
2664+
i32.sub
2665+
i32.const 0
2666+
local.get $3
2667+
i32.const 1
2668+
i32.shl
2669+
i32.sub
26642670
i32.le_u
2665-
if (result i32)
2666-
i32.const 1
2667-
else
2668-
local.get $5
2669-
local.get $3
2670-
i32.add
2671-
local.get $4
2672-
i32.le_u
2673-
end
26742671
if
26752672
local.get $5
26762673
local.get $4

tests/compiler/infer-array.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,19 +1192,16 @@
11921192
i32.lt_s
11931193
drop
11941194
local.get $4
1195-
local.get $3
1196-
i32.add
11971195
local.get $5
1196+
i32.sub
1197+
local.get $3
1198+
i32.sub
1199+
i32.const 0
1200+
local.get $3
1201+
i32.const 1
1202+
i32.shl
1203+
i32.sub
11981204
i32.le_u
1199-
if (result i32)
1200-
i32.const 1
1201-
else
1202-
local.get $5
1203-
local.get $3
1204-
i32.add
1205-
local.get $4
1206-
i32.le_u
1207-
end
12081205
if
12091206
local.get $5
12101207
local.get $4

tests/compiler/number.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2498,19 +2498,16 @@
24982498
i32.lt_s
24992499
drop
25002500
local.get $4
2501-
local.get $3
2502-
i32.add
25032501
local.get $5
2502+
i32.sub
2503+
local.get $3
2504+
i32.sub
2505+
i32.const 0
2506+
local.get $3
2507+
i32.const 1
2508+
i32.shl
2509+
i32.sub
25042510
i32.le_u
2505-
if (result i32)
2506-
i32.const 1
2507-
else
2508-
local.get $5
2509-
local.get $3
2510-
i32.add
2511-
local.get $4
2512-
i32.le_u
2513-
end
25142511
if
25152512
local.get $5
25162513
local.get $4

tests/compiler/object-literal.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2845,19 +2845,16 @@
28452845
i32.lt_s
28462846
drop
28472847
local.get $4
2848-
local.get $3
2849-
i32.add
28502848
local.get $5
2849+
i32.sub
2850+
local.get $3
2851+
i32.sub
2852+
i32.const 0
2853+
local.get $3
2854+
i32.const 1
2855+
i32.shl
2856+
i32.sub
28512857
i32.le_u
2852-
if (result i32)
2853-
i32.const 1
2854-
else
2855-
local.get $5
2856-
local.get $3
2857-
i32.add
2858-
local.get $4
2859-
i32.le_u
2860-
end
28612858
if
28622859
local.get $5
28632860
local.get $4

tests/compiler/resolve-access.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,19 +1192,16 @@
11921192
i32.lt_s
11931193
drop
11941194
local.get $4
1195-
local.get $3
1196-
i32.add
11971195
local.get $5
1196+
i32.sub
1197+
local.get $3
1198+
i32.sub
1199+
i32.const 0
1200+
local.get $3
1201+
i32.const 1
1202+
i32.shl
1203+
i32.sub
11981204
i32.le_u
1199-
if (result i32)
1200-
i32.const 1
1201-
else
1202-
local.get $5
1203-
local.get $3
1204-
i32.add
1205-
local.get $4
1206-
i32.le_u
1207-
end
12081205
if
12091206
local.get $5
12101207
local.get $4

tests/compiler/resolve-binary.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3498,19 +3498,16 @@
34983498
i32.lt_s
34993499
drop
35003500
local.get $4
3501-
local.get $3
3502-
i32.add
35033501
local.get $5
3502+
i32.sub
3503+
local.get $3
3504+
i32.sub
3505+
i32.const 0
3506+
local.get $3
3507+
i32.const 1
3508+
i32.shl
3509+
i32.sub
35043510
i32.le_u
3505-
if (result i32)
3506-
i32.const 1
3507-
else
3508-
local.get $5
3509-
local.get $3
3510-
i32.add
3511-
local.get $4
3512-
i32.le_u
3513-
end
35143511
if
35153512
local.get $5
35163513
local.get $4

tests/compiler/resolve-elementaccess.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2126,19 +2126,16 @@
21262126
i32.lt_s
21272127
drop
21282128
local.get $4
2129-
local.get $3
2130-
i32.add
21312129
local.get $5
2130+
i32.sub
2131+
local.get $3
2132+
i32.sub
2133+
i32.const 0
2134+
local.get $3
2135+
i32.const 1
2136+
i32.shl
2137+
i32.sub
21322138
i32.le_u
2133-
if (result i32)
2134-
i32.const 1
2135-
else
2136-
local.get $5
2137-
local.get $3
2138-
i32.add
2139-
local.get $4
2140-
i32.le_u
2141-
end
21422139
if
21432140
local.get $5
21442141
local.get $4

tests/compiler/resolve-ternary.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3889,19 +3889,16 @@
38893889
i32.lt_s
38903890
drop
38913891
local.get $4
3892-
local.get $3
3893-
i32.add
38943892
local.get $5
3893+
i32.sub
3894+
local.get $3
3895+
i32.sub
3896+
i32.const 0
3897+
local.get $3
3898+
i32.const 1
3899+
i32.shl
3900+
i32.sub
38953901
i32.le_u
3896-
if (result i32)
3897-
i32.const 1
3898-
else
3899-
local.get $5
3900-
local.get $3
3901-
i32.add
3902-
local.get $4
3903-
i32.le_u
3904-
end
39053902
if
39063903
local.get $5
39073904
local.get $4

tests/compiler/retain-release-sanity.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2935,19 +2935,16 @@
29352935
i32.lt_s
29362936
drop
29372937
local.get $4
2938-
local.get $3
2939-
i32.add
29402938
local.get $5
2939+
i32.sub
2940+
local.get $3
2941+
i32.sub
2942+
i32.const 0
2943+
local.get $3
2944+
i32.const 1
2945+
i32.shl
2946+
i32.sub
29412947
i32.le_u
2942-
if (result i32)
2943-
i32.const 1
2944-
else
2945-
local.get $5
2946-
local.get $3
2947-
i32.add
2948-
local.get $4
2949-
i32.le_u
2950-
end
29512948
if
29522949
local.get $5
29532950
local.get $4

0 commit comments

Comments
 (0)