Open Bug 832779 Opened 11 years ago Updated 5 months ago

IonMonkey: Unpack 2 Int32 values and convert them to 2 doubles with SIMD.

Categories

(Core :: JavaScript Engine: JIT, defect, P5)

x86_64
Linux
defect

Tracking

()

People

(Reporter: nbp, Unassigned)

References

(Blocks 1 open bug)

Details

(Keywords: perf)

Type Inference provide a good type information, but when TI reports a double type, the value stored in memory might still be a boxed int32.  The goal of this bug is to implement the X86Assembly instruction to unpack packed int 32 values (2x 64 bits values in one xmm register).

The instructions needed to do so are:
  pblendw dst, src, i  ; used to filter the tag or the payload
  pcmpeqq r1, r2       ; used to compare if both tags are int32 JSVAL tags
  ptest r1, r1         ; set the Zero flag if r1 == r2 in the previous compare.

  pshufw r1, r1, imm   ; used to pack int32 values to the lowest part to be used with …
  cvtdq2pd r1, r1      ; to convert 2 int32 into 2 doubles.

With these instruction, we can implement an equivalent of LoadElementT (which relies on loadUnboxedValue) which is only using SIMD instructions to load and unbox 2 Int32 values if necessary.
Assignee: general → nicolas.b.pierron
Status: NEW → ASSIGNED
Assignee: nicolas.b.pierron → nobody
Status: ASSIGNED → NEW
Component: JavaScript Engine → JavaScript Engine: JIT
Keywords: perf
Priority: -- → P5
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.