Closed
Bug 483649
Opened 16 years ago
Closed 16 years ago
ppc64 debugger builds failing test suite
Categories
(Tamarin Graveyard :: Virtual Machine, defect)
Tracking
(Not tracked)
VERIFIED
FIXED
flash10.1
People
(Reporter: rreitmai, Assigned: rreitmai)
References
Details
Attachments
(1 file, 1 obsolete file)
610 bytes,
patch
|
edwsmith
:
review+
|
Details | Diff | Splinter Review |
The following tests are failing on [debug|release] debugger builds :
ecma3/TypeConversion/e9_3.abc : Number(false) = -238423838475.15292 FAILED! expected: 0
ecma3/TypeConversion/e9_3.abc : Number(0) = -238423838475.15292 FAILED! expected: 0
ecma3/Types/e8_5.abc : var s:Number = 'string' = -238423838475.15292 FAILED! expected: NaN
Assignee | ||
Updated•16 years ago
|
Assignee: nobody → rreitmai
Comment 1•16 years ago
|
||
Marked expected failures until this is fixed: 1608:7c44b7d26f76
Marking as blocking the next TC merge since this is an injection.
Blocks: 481413
Assignee | ||
Comment 2•16 years ago
|
||
Interesting; the following code fails:
function foo() {
var a = Number(false);
var b = Number(0);
return b
}
print(foo())
And re-enabling deadvars() allows it to pass.
Assignee | ||
Comment 3•16 years ago
|
||
The issue turned out to be specific to the fmr() instruction.
We were generating fmr f1,r15 <= note non-fp reg as src.
The problem started with a downstream store (stqi) for the result of a i2f. This reserved a gp register, r15. When we then came across a call in which we needed to pass the i2f result, f1 was marked as the argument and since the i2f result was already in r15, a fmr was issued.
This brings up an interesting point on 64b systems; since gp regs can hold the float value and we're using quad instructions somewhat interchangeably with float on these systems, are there other instances where we incorrectly choose a gp reg instead of a fp reg?
Diving into this bug also made me realize that debugger builds (with deadvars disabled) are generating absolutely horrible code. I'll open a bug for that.
Attachment #369001 -
Flags: review?(edwsmith)
Assignee | ||
Comment 4•16 years ago
|
||
Attachment #369001 -
Attachment is obsolete: true
Attachment #369003 -
Flags: review?(edwsmith)
Attachment #369001 -
Flags: review?(edwsmith)
Comment 5•16 years ago
|
||
(In reply to comment #3)
> Created an attachment (id=369001) [details]
> This brings up an interesting point on 64b systems; since gp regs can hold the
> float value and we're using quad instructions somewhat interchangeably with
> float on these systems, are there other instances where we incorrectly choose a
> gp reg instead of a fp reg?
bugs are certianly possible, but in the X64 code I did find and fix several in this area. Each case in asm_nongp_copy() is definitely being used, as a result.
Take a look at NativeX64 asm_regarg(), since it just uses findSpecificRegFor(), it should handle the various corner cases. (of course, it is slightly less optimized; the ppc code will copy from a saved-reg to a scratch-reg without forgetting the expr's assignment to the saved reg. this should yeild less spillage).
> Diving into this bug also made me realize that debugger builds (with deadvars
> disabled) are generating absolutely horrible code. I'll open a bug for that.
Updated•16 years ago
|
Attachment #369003 -
Flags: review?(edwsmith) → review+
Assignee | ||
Comment 6•16 years ago
|
||
e772e92d06e4: Fix for bug 483649 - ppc64 fmr instruction fix (r=edwsmith) - rev 1682
Status: ASSIGNED → RESOLVED
Closed: 16 years ago
Resolution: --- → FIXED
Comment 7•15 years ago
|
||
failing tests have been passing since the fix was submitted, removed "expectedfail" in changeset 1696:b1d4d72e4a22
Status: RESOLVED → VERIFIED
You need to log in
before you can comment on or make changes to this bug.
Description
•