| Summary: | PPC64, generate_store_FPRF() generates too many Iops | ||
|---|---|---|---|
| Product: | [Developer tools] valgrind | Reporter: | Carl Love <cel> |
| Component: | vex | Assignee: | Julian Seward <jseward> |
| Status: | CLOSED FIXED | ||
| Severity: | normal | ||
| Priority: | NOR | ||
| Version First Reported In: | 3.14 SVN | ||
| Target Milestone: | --- | ||
| Platform: | Other | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
| Attachments: | replace body of generate_store_FPRF with C helper function. | ||
|
Description
Carl Love
2017-09-29 18:00:00 UTC
Created attachment 108093 [details]
replace body of generate_store_FPRF with C helper function.
replace the generate_store_FPRF function body with a C Helper function.
+#define V128_FRACTION_MASK 0x0000FFFFFFFFFFFFULL /* upper 64-bit fractional mask */
+
+ULong generate_C_FPCC_helper( ULong size, ULong src_hi, ULong src ) {
+ UInt NaN, inf, zero, norm, dnorm, pos;
+ UInt bit0, bit1, bit2, bit3;
* nit: { on its own line, in the house style
* Please rename 'size' here to 'irType', because that's what it really is
+ if ( size == Ity_I16 ) {
+ frac_part = I16_FRACTION_MASK & src;
+ exp_mask = I16_EXP_MASK;
...
+ exp_mask = V128_EXP_MASK;
+ exp_part = exp_mask & src_hi;
+ sign_bit = src_hi >> 63;
+ }
Add
else {
vassert(0);
}
so as to cause the system to fail if any other value is passed for irType.
OK to land with the above points fixed.
patch committed: commit acdeb75d2a58f4f3910ddaf9b2bc2ec74378fa3a |