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

tests/compiler/rt/finalize.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3278,19 +3278,16 @@
32783278
i32.lt_s
32793279
drop
32803280
local.get $4
3281-
local.get $3
3282-
i32.add
32833281
local.get $5
3282+
i32.sub
3283+
local.get $3
3284+
i32.sub
3285+
i32.const 0
3286+
local.get $3
3287+
i32.const 1
3288+
i32.shl
3289+
i32.sub
32843290
i32.le_u
3285-
if (result i32)
3286-
i32.const 1
3287-
else
3288-
local.get $5
3289-
local.get $3
3290-
i32.add
3291-
local.get $4
3292-
i32.le_u
3293-
end
32943291
if
32953292
local.get $5
32963293
local.get $4

tests/compiler/rt/stub-realloc.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1198,19 +1198,16 @@
11981198
i32.lt_s
11991199
drop
12001200
local.get $4
1201-
local.get $3
1202-
i32.add
12031201
local.get $5
1202+
i32.sub
1203+
local.get $3
1204+
i32.sub
1205+
i32.const 0
1206+
local.get $3
1207+
i32.const 1
1208+
i32.shl
1209+
i32.sub
12041210
i32.le_u
1205-
if (result i32)
1206-
i32.const 1
1207-
else
1208-
local.get $5
1209-
local.get $3
1210-
i32.add
1211-
local.get $4
1212-
i32.le_u
1213-
end
12141211
if
12151212
local.get $5
12161213
local.get $4

tests/compiler/std/array-literal.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2590,19 +2590,16 @@
25902590
i32.lt_s
25912591
drop
25922592
local.get $4
2593-
local.get $3
2594-
i32.add
25952593
local.get $5
2594+
i32.sub
2595+
local.get $3
2596+
i32.sub
2597+
i32.const 0
2598+
local.get $3
2599+
i32.const 1
2600+
i32.shl
2601+
i32.sub
25962602
i32.le_u
2597-
if (result i32)
2598-
i32.const 1
2599-
else
2600-
local.get $5
2601-
local.get $3
2602-
i32.add
2603-
local.get $4
2604-
i32.le_u
2605-
end
26062603
if
26072604
local.get $5
26082605
local.get $4

tests/compiler/std/array.untouched.wat

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3447,19 +3447,16 @@
34473447
i32.lt_s
34483448
drop
34493449
local.get $4
3450-
local.get $3
3451-
i32.add
34523450
local.get $5
3451+
i32.sub
3452+
local.get $3
3453+
i32.sub
3454+
i32.const 0
3455+
local.get $3
3456+
i32.const 1
3457+
i32.shl
3458+
i32.sub
34533459
i32.le_u
3454-
if (result i32)
3455-
i32.const 1
3456-
else
3457-
local.get $5
3458-
local.get $3
3459-
i32.add
3460-
local.get $4
3461-
i32.le_u
3462-
end
34633460
if
34643461
local.get $5
34653462
local.get $4

0 commit comments

Comments
 (0)