Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
pike
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
pikelang
pike
Commits
d3d04df4
Commit
d3d04df4
authored
10 years ago
by
Henrik (Grubba) Grubbström
Browse files
Options
Downloads
Patches
Plain Diff
Optimizer: Handle more cases of CLEAR_{,N_}LOCAL.
This improves the code generated by the previous commit.
parent
91561ca5
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/peep.in
+18
-0
18 additions, 0 deletions
src/peep.in
with
18 additions
and
0 deletions
src/peep.in
+
18
−
0
View file @
d3d04df4
...
@@ -118,10 +118,20 @@ BYTE ENTRY START_FUNCTION CLEAR_N_LOCAL [$1a <= $4a] : BYTE($1a) ENTRY START_FUN
...
@@ -118,10 +118,20 @@ BYTE ENTRY START_FUNCTION CLEAR_N_LOCAL [$1a <= $4a] : BYTE($1a) ENTRY START_FUN
CLEAR_LOCAL CLEAR_LOCAL($1a) : CLEAR_LOCAL($1a)
CLEAR_LOCAL CLEAR_LOCAL($1a) : CLEAR_LOCAL($1a)
CLEAR_LOCAL CLEAR_LOCAL($1a+1) : CLEAR_N_LOCAL($1a,2)
CLEAR_LOCAL CLEAR_LOCAL($1a+1) : CLEAR_N_LOCAL($1a,2)
CLEAR_LOCAL CLEAR_LOCAL($1a-1) : CLEAR_N_LOCAL($2a,2)
CLEAR_LOCAL CLEAR_N_LOCAL($1a+1) : CLEAR_N_LOCAL($1a,$2b+1)
CLEAR_LOCAL CLEAR_N_LOCAL($1a+1) : CLEAR_N_LOCAL($1a,$2b+1)
CLEAR_N_LOCAL CLEAR_LOCAL($1a-1) : CLEAR_N_LOCAL($1a-1, $1b+1)
CLEAR_N_LOCAL CLEAR_LOCAL($1a+$1b) : CLEAR_N_LOCAL($1a,$1b+1)
CLEAR_N_LOCAL CLEAR_LOCAL($1a+$1b) : CLEAR_N_LOCAL($1a,$1b+1)
// Overlapping range and single:
CLEAR_LOCAL CLEAR_N_LOCAL [$1a >= $2a] [$1a < $2a+$2b] : CLEAR_N_LOCAL($2a, $2b)
CLEAR_N_LOCAL CLEAR_LOCAL [$1a <= $2a] [$2a < $1a+$1b] : CLEAR_N_LOCAL($1a, $1b)
// Joining of ranges:
CLEAR_N_LOCAL CLEAR_N_LOCAL [$1a <= $2a] [$1a + $1b >= $2a] : CLEAR_N_LOCAL($1a, MAXIMUM($1a + $1b, $2a + $2b) - $1a)
CLEAR_N_LOCAL CLEAR_N_LOCAL [$2a <= $1a] [$2a + $2b >= $1a] : CLEAR_N_LOCAL($2a, MAXIMUM($1a + $1b, $2a + $2b) - $2a)
// Attempt to de-interleave clearing of locals.
// Attempt to de-interleave clearing of locals.
CONST0 CLEAR_LOCAL : CLEAR_LOCAL($2a) CONST0
CONST0 CLEAR_LOCAL : CLEAR_LOCAL($2a) CONST0
CONST1 CLEAR_LOCAL : CLEAR_LOCAL($2a) CONST1
CONST1 CLEAR_LOCAL : CLEAR_LOCAL($2a) CONST1
...
@@ -130,6 +140,14 @@ NUMBER CLEAR_LOCAL : CLEAR_LOCAL($2a) NUMBER($1a)
...
@@ -130,6 +140,14 @@ NUMBER CLEAR_LOCAL : CLEAR_LOCAL($2a) NUMBER($1a)
NEG_NUMBER CLEAR_LOCAL : CLEAR_LOCAL($2a) NEG_NUMBER($1a)
NEG_NUMBER CLEAR_LOCAL : CLEAR_LOCAL($2a) NEG_NUMBER($1a)
CONSTANT CLEAR_LOCAL : CLEAR_LOCAL($2a) CONSTANT($1a)
CONSTANT CLEAR_LOCAL : CLEAR_LOCAL($2a) CONSTANT($1a)
// FIXME:
// The following aren't sound as they need to account for
// frame->min_number_of_locals to not affect trampolines.
// The cleanest fix is probably to move trampolies to true objects.
// CLEAR_LOCAL RETURN_0: RETURN_0
// CLEAR_LOCAL_RETURN_1: RETURN_1
// CLEAR_N_LOCAL RETURN_0: RETURN_0
// CLEAR_N_LOCAL RETURN_1: RETURN_1
// CONST_1 MULTIPLY : NEGATE
// CONST_1 MULTIPLY : NEGATE
// CONST0 MULTIPLY : POP_VALUE CONST0
// CONST0 MULTIPLY : POP_VALUE CONST0
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment