• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
232:
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