BaselineCompiler: Support local/arg inc/dec ops

RESOLVED FIXED

Status

()

defect
RESOLVED FIXED
7 years ago
7 years ago

People

(Reporter: jandem, Assigned: jandem)

Tracking

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(3 attachments)

No description provided.
Attachment #680131 - Flags: review?(kvijayan)
Uses an inline path for int32 and double. We can test for both with a single compare and in these cases POS is a no-op.
Attachment #680152 - Flags: review?(kvijayan)
i++ is decomposed as

getlocal 0
pos
dup
one
add
setlocal 0

The patch doesn't attempt to DUP unsynced constants etc directly. There are probably other uses of DUP but here it doesn't matter.
Attachment #680172 - Flags: review?(kvijayan)
Attachment #680131 - Flags: review?(kvijayan) → review+
Attachment #680152 - Flags: review?(kvijayan) → review+
Attachment #680172 - Flags: review?(kvijayan) → review+
There's something I don't understand about decomposed ops.  JSOP_LOCALINC has the decompose flag set on it, but in the emitted bytecode it doesn't actually seem to be decomposed.

The couple of other inc ops I checked actually had the surrogate ops emitted, but not LOCALINC.  Is there something I'm missing?
(In reply to Kannan Vijayan [:djvj] from comment #4)
> There's something I don't understand about decomposed ops.  JSOP_LOCALINC
> has the decompose flag set on it, but in the emitted bytecode it doesn't
> actually seem to be decomposed.

Are you using a recent build? Local/arg ops were decomposed in bug 804636.

js> dis(function() { var i; i++; });
flags: LAMBDA
loc     op
-----   --
main:
00000:  getlocal 0
00003:  pop
00004:  localinc 11
00007:  getlocal 0
00010:  pos
00011:  dup
00012:  one
00013:  add
00014:  setlocal 0
00017:  pop
00018:  pop
00019:  stop
You need to log in before you can comment on or make changes to this bug.