Home | History | Annotate | Download | only in x86
      1 %verify "executed"
      2     /*
      3      * Long integer shift, 2addr version.  vA is 64-bit value/result, vB is
      4      * 32-bit shift distance.
      5      */
      6     /* shl-long/2addr vA, vB */
      7     /* ecx gets shift count */
      8     /* Need to spill rIBASE */
      9     /* rINSTw gets AA */
     10     movzbl    rINSTbl,%ecx         # ecx<- BA
     11     andb      $$0xf,rINSTbl        # rINST<- A
     12     GET_VREG_WORD %eax rINST 0     # eax<- v[AA+0]
     13     sarl      $$4,%ecx             # ecx<- B
     14     SPILL(rIBASE)
     15     GET_VREG_WORD rIBASE rINST 1   # rIBASE<- v[AA+1]
     16     GET_VREG_R %ecx %ecx           # ecx<- vBB
     17     shrdl     rIBASE,%eax
     18     sarl      %cl,rIBASE
     19     testb     $$32,%cl
     20     je        2f
     21     movl      rIBASE,%eax
     22     sarl      $$31,rIBASE
     23 2:
     24     SET_VREG_WORD rIBASE rINST 1   # v[AA+1]<- rIBASE
     25     UNSPILL(rIBASE)
     26     FETCH_INST_OPCODE 1 %ecx
     27     SET_VREG_WORD %eax rINST 0    # v[AA+0]<- eax
     28     ADVANCE_PC 1
     29     GOTO_NEXT_R %ecx
     30