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     shldl     %eax,rIBASE
     18     sall      %cl,%eax
     19     testb     $$32,%cl
     20     je        2f
     21     movl      %eax,rIBASE
     22     xorl      %eax,%eax
     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