Closed
Bug 818115
Opened 12 years ago
Closed 12 years ago
BaselineCompiler: Compile DIV and MOD
Categories
(Core :: JavaScript Engine, defect)
Tracking
()
RESOLVED
FIXED
People
(Reporter: evilpie, Assigned: evilpie)
References
(Blocks 1 open bug)
Details
(Whiteboard: [js:t])
Attachments
(3 files, 1 obsolete file)
2.57 KB,
patch
|
jandem
:
review+
|
Details | Diff | Splinter Review |
6.97 KB,
patch
|
jandem
:
review+
|
Details | Diff | Splinter Review |
5.62 KB,
patch
|
djvj
:
review+
|
Details | Diff | Splinter Review |
This is just the fallback version. The x64 version I am working on right now, sefaults on 3d-raytrace.
Assignee | ||
Updated•12 years ago
|
Attachment #688308 -
Attachment is patch: true
Attachment #688308 -
Flags: review?(jdemooij)
Updated•12 years ago
|
Blocks: BaselineInlineCaches
Comment 1•12 years ago
|
||
Comment on attachment 688308 [details] [diff] [review] v1 Review of attachment 688308 [details] [diff] [review]: ----------------------------------------------------------------- Thanks. The 3d-raytrace crash looked unrelated, I can fix after you finish the patch.
Attachment #688308 -
Flags: review?(jdemooij) → review+
Comment 2•12 years ago
|
||
This patch will assert when attaching an Int32 stub, you should just return early before we attach the stub: if (op == JSOP_MOD || op == JSOP_DIV) { // TODO: support optimized DIV/MOD stubs. return true; }
Assignee | ||
Comment 3•12 years ago
|
||
Sorry I forgot to change that, because I was already working on this. No ARM support this time, this is to complex to model without testing. I put quite a lot of comments into this, so it should be understandable.
Updated•12 years ago
|
Whiteboard: [js:t]
Comment 4•12 years ago
|
||
Comment on attachment 688822 [details] [diff] [review] inline code for x86/x64 Review of attachment 688822 [details] [diff] [review]: ----------------------------------------------------------------- Thanks! r=me with nits addressed. I can add the ARM implementation tomorrow, so either land this patch and ensure we don't attach DIV/MOD stubs on ARM + file a follow-up bug, or wait until the ARM version is ready and I can land both. ::: js/src/ion/x64/BaselineIC-x64.cpp @@ +81,5 @@ > > masm.boxValue(JSVAL_TYPE_INT32, ExtractTemp0, R0.valueReg()); > break; > + case JSOP_DIV: > + masm.unboxInt32(R0, eax); Nit: add the following before this line: JS_ASSERT(R2.scratchReg() == rax); JS_ASSERT(R0.valueReg() != rdx); JS_ASSERT(R1.valueReg() != rdx); @@ +84,5 @@ > + case JSOP_DIV: > + masm.unboxInt32(R0, eax); > + masm.unboxInt32(R1, ExtractTemp0); > + > + // Prevent devision by 0. Nit: division @@ +101,5 @@ > + masm.boxValue(JSVAL_TYPE_INT32, eax, R0.valueReg()); > + break; > + case JSOP_MOD: > + { > + masm.unboxInt32(R0, eax); Nit: add these asserts here too. ::: js/src/ion/x86/BaselineIC-x86.cpp @@ +88,5 @@ > > masm.movl(scratchReg, R0.payloadReg()); > break; > + case JSOP_DIV: > + // Prevent devision by 0. Nit: s/devision/division. @@ +95,5 @@ > + // Prevent negative 0 and -2147483648 / -1. > + masm.branchTest32(Assembler::Zero, R0.payloadReg(), Imm32(0x7fffffff), &failure); > + > + // For idiv we need eax. > + masm.movl(R0.payloadReg(), eax); Add a JS_ASSERT(R1.typeReg() == eax); before this line, it also makes it easier to understand what's going on. @@ +105,5 @@ > + > + // A remainder implies a double result. > + masm.branchTest32(Assembler::NonZero, edx, edx, &revertRegister); > + > + masm.tagValue(JSVAL_TYPE_INT32, eax, R0); masm.movl(eax, R0.payloadReg()); @@ +115,5 @@ > + > + // Prevent negative 0 and -2147483648 % -1. > + masm.branchTest32(Assembler::Zero, R0.payloadReg(), Imm32(0x7fffffff), &failure); > + > + // For idiv we need eax. Nit: JS_ASSERT(R1.typeReg() == eax); @@ +205,5 @@ > + case JSOP_DIV: > + case JSOP_MOD: > + masm.bind(&revertRegister); > + masm.movl(scratchReg, R0.payloadReg()); > + masm.tagValue(JSVAL_TYPE_INT32, ebx, R1); Nit: masm.movl(ImmType(JSVAL_TYPE_INT32), R1.typeReg()); would be a bit clearer, I was wondering which part of R1 we had to restore.
Attachment #688822 -
Flags: review?(jdemooij) → review+
Comment 5•12 years ago
|
||
Just like the Ion implementation.
Attachment #689174 -
Flags: review?(kvijayan)
Comment 6•12 years ago
|
||
Attachment #689174 -
Attachment is obsolete: true
Attachment #689174 -
Flags: review?(kvijayan)
Attachment #689176 -
Flags: review?(kvijayan)
Updated•12 years ago
|
Attachment #689176 -
Flags: review?(kvijayan) → review+
Assignee | ||
Comment 7•12 years ago
|
||
I committed my two patches. http://hg.mozilla.org/projects/ionmonkey/rev/1eec948f6b78 http://hg.mozilla.org/projects/ionmonkey/rev/dbeea6f1da78
Comment 8•12 years ago
|
||
ARM version + removed the #ifdef: https://hg.mozilla.org/projects/ionmonkey/rev/ce883e68337c
Status: ASSIGNED → RESOLVED
Closed: 12 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•