Home | History | Annotate | Download | only in x86
      1 /*
      2  * Long integer shift, 2addr version.  vA is 64-bit value/result, vB is
      3  * 32-bit shift distance.
      4  */
      5     /* shl-long/2addr vA, vB */
      6     /* ecx gets shift count */
      7     /* Need to spill rIBASE */
      8     /* rINSTw gets AA */
      9     movzbl  rINSTbl, %ecx                   # ecx <- BA
     10     andb    $$0xf, rINSTbl                  # rINST <- A
     11     GET_VREG %eax, rINST                    # eax <- v[AA+0]
     12     sarl    $$4, %ecx                       # ecx <- B
     13     movl    rIBASE, LOCAL0(%esp)
     14     GET_VREG_HIGH rIBASE, rINST             # rIBASE <- v[AA+1]
     15     GET_VREG %ecx, %ecx                     # ecx <- vBB
     16     shldl   %eax, rIBASE
     17     sall    %cl, %eax
     18     testb   $$32, %cl
     19     je      2f
     20     movl    %eax, rIBASE
     21     xorl    %eax, %eax
     22 2:
     23     SET_VREG_HIGH rIBASE, rINST             # v[AA+1] <- rIBASE
     24     movl    LOCAL0(%esp), rIBASE
     25     SET_VREG %eax, rINST                    # v[AA+0] <- eax
     26     ADVANCE_PC_FETCH_AND_GOTO_NEXT 1
     27